我有一个用NodeJS执行的.js文件。下面是我的文件的内容:
var ctry = "America";
function outer(msg) {
console.log(msg + " " + ctry) ;
var ctry = "Canada" ;
}
outer("God Bless");
当我运行这个文件时,我希望看到“上帝保佑美国”,但我看到的却是“上帝保佑未定义”。
如果我注释掉内部的var _ ctry =行,我会得到“上帝保佑美国”,如果我把内部的var _ ctry =行移到console.log上面,我会得到“上帝保佑加拿大”。后两种情况似乎合乎逻辑,但为什么在上面的代码中,console.log后面的变量定义导致ctry被设置为underfined?
发布于 2012-07-17 22:14:53
局部变量(在本例中为ctry
)的作用域是在其中声明该变量的整个函数(也就是说,就好像该变量是在函数的顶部声明的一样)。上面的代码在语义上与:
function outer(msg) {
var ctry ;
console.log(msg + " " + ctry) ;
ctry = "Canada" ;
}
现在应该很清楚为什么要在输出中使用undefined
了。
发布于 2012-07-17 22:17:11
当您在一个函数内说var ctry
(只要它在函数内就无关紧要),那么在函数内对ctry
的任何调用(同样,在哪里都不重要)将引用内部变量,而不是全局变量。问题是,JS解释器只看到一个变量的定义,但直到执行该行才会用值(Canada)初始化它,所以在console.log
中它还是未定义的。
https://stackoverflow.com/questions/11531610
复制相似问题