在鸟哥:Javascript作用域原理 一文中摘录以下代码:
function factory() {
var name = 'laruence';
var intro = function(){
alert('I am ' + name);
}
return intro;
}
function app(para){
var name = para;
var func = factory();
func();
}
app('eve');
我是这么理解的,最后调用时intro的作用域链可能是这样的intro --> factory -->window。
那么,我把代码改成下面
function factory() {//去掉了factory对name的定义
var intro = function(){
console.log(name)
}
return intro;
}
function app(para){
var name = para;
var func = factory();
func();
}
app('eve');
但是结果却输出了空字符串;
我再定义一个全局的
var name = '1111'
然后执行,就输出了1111.
证明是之前的作用域链应该是正确的。
但是为什么在第二段代码会输出空字符串而不是undefined呢?
undefined
而是会报未定义的错。