bac*_*ser 3 javascript scope lexical
我有一个.js文件,我正在使用NodeJS执行.这是我的文件的内容:
var ctry = "America";
function outer(msg) {
console.log(msg + " " + ctry) ;
var ctry = "Canada" ;
}
outer("God Bless");
Run Code Online (Sandbox Code Playgroud)
当我运行这个文件时,我希望看到"上帝保佑美国"但相反,我看到"上帝保佑未定义".
如果我注释掉内部var ctry = line,我会得到"God Bless America",如果我将内部var ctry =行移到console.log之上,我会得到"God Bless Canada".最后两个案例似乎是合乎逻辑的,但为什么在console.log之后var ctry的定义导致ctry在上面的代码中被设置为underfined?
局部变量的范围(ctry在您的情况下)是声明它的整个函数(也就是说,好像变量是在函数的顶部声明的).上面的代码在语义上与以下相同:
function outer(msg) {
var ctry ;
console.log(msg + " " + ctry) ;
ctry = "Canada" ;
}
Run Code Online (Sandbox Code Playgroud)
现在应该清楚为什么你进入undefined输出.
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |