![](/img/trans.png)
[英]Why code after return statement executing inside for-in loop in javascript?
[英]why code after the return statement is reachable in javascript
我是JavaScript的新手,我有一个困惑。
正如我们一直在教的那样,return语句之后的代码不可访问。
但这在以下情况下是不正确的,我无法理解为什么会这样。
function foo() {
//define bar once
function bar() {
return 3;
}
//redefine it
function bar() {
return 8;
}
//return its invocation
return bar(); //8
}
alert(foo());
http://jsfiddle.net/jainhimanshu/euga4mcy/
输出为8,但应为3。
所以任何人都可以清除我的概念。
这是因为您必须调用该函数以从中获取return
值。
功能bar
不被调用,仅被定义。
因此,当函数foo()
被调用时
return bar();
从foo
执行,并返回8
。
编译器将foo
视为如下(在覆盖bar
):
function foo() {
function bar() {
return 8;
}
return bar();
}
alert(foo());
当到达return bar()
时,将调用功能bar
并返回其值。
调用后bar
function foo() {
return 8;
}
alert(foo());
function foo(){
// ....
}
创建新的Function对象 ,并向其分配名称foo
。 它仍然没有被调用的地方,只是创建的,因此不会触发任何return语句。
在此函数内部时,您将创建新的Functions
,例如
function foo(){
function bar() {
return 3;
}
return 4;
}
// after you execute foo
console.log(foo()); // will log 4
但是非常重要的是,在此词法范围内创建了功能bar
,但未在任何位置执行。 另见词汇范围
但是当你有这个
function foo(){
function bar(){
return 3;
}
function bar() {
return 8;
}
return bar();
}
// after you execute foo
console.log(foo()); // will log 8
在global
范围内执行函数foo
,它将创建名为bar
Function对象,然后创建名为bar
新Function对象,旧的对象将被重新定义,与将新值分配给variable
,值更改一样,但是在这种情况下,函数主体为分配给功能名称的更改。
由于您的函数foo
具有return
关键字,因此它将返回该值。 它返回的值是返回函数bar
值,作为return bar();
将执行功能bar
并返回从功能bar
接收的值,例如,值为8。
比较变量重定义和函数重定义
var a;
a = "some string";
a = 5; // a has value 5, no mater older values
// same goes for functions
function bar(){ .... }
function bar(){ .... }
function bar(){ .... }
// invoke bar
bar(); // last function bar will be executed, no mater other function's bar definitions
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.