Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数和返回语句_Javascript_Scope_Hoisting - Fatal编程技术网

Javascript 函数和返回语句

Javascript 函数和返回语句,javascript,scope,hoisting,Javascript,Scope,Hoisting,我希望此函数(为了示例而减少)能够顺利运行,但由于未定义fn2,它会失败: void function(){ var var1 = fn1(); var var2 = fn2(); function fn1(){}; return function fn2(){}; }(); return语句如何从提升中排除fn2的函数表达式?仅提升使用函数声明创建的函数。返回函数fn2(){}中的函数是使用(命名)函数表达式创建的,因此不会被提升 函数的求值方式取决于上下

我希望此函数(为了示例而减少)能够顺利运行,但由于未定义fn2,它会失败:

void function(){
    var var1 = fn1();
    var var2 = fn2();

    function fn1(){};

    return function fn2(){};
}();

return语句如何从提升中排除
fn2
的函数表达式?

仅提升使用函数声明创建的函数。
返回函数fn2(){}中的函数是使用(命名)函数表达式创建的,因此不会被提升

函数的求值方式取决于上下文。语句(如return语句)中的任何函数都被解析为函数表达式。另一个例子是在中使用括号:括号充当分组运算符,确保括号的内容作为表达式进行计算

在Kangax的优秀文章中可以找到很多关于这方面的信息:


仅提升使用函数声明创建的函数。
返回函数fn2(){}中的函数是使用(命名)函数表达式创建的,因此不会被提升

函数的求值方式取决于上下文。语句(如return语句)中的任何函数都被解析为函数表达式。另一个例子是在中使用括号:括号充当分组运算符,确保括号的内容作为表达式进行计算

在Kangax的优秀文章中可以找到很多关于这方面的信息: