function aa(){
if(typeof name === 'undefined'){
var name = "Jack";
console.info('Goodbye '+ name);
}else{
console.info('Hello ' + name);
}
}
aa();//Goodbye Jack
为什么这里,没有函数声明的提升? name 不应该是提升了吗?
var name = 'World';
(function(){
if(typeof name === 'undefined'){
var name = "Jack";
console.info('Goodbye '+ name);
}else{
console.info('Hello ' + name);
}
})();
这里的是不是立即调用函数就访问不到外面的 World变量
你第二个应该结果和第一个一样吧,并不是你想的那样访问不到外面的name变量了,而是你在这个自执行的函数中声明了name变量,name变量在执行上下文时会被提前声明,所以不可能访问到外面的,因为你的局部(函数内)就有这个name变量啊,js就不会再沿着作用域链向上去找了啊。
你的代码相当于:
要想访问到外面的name变量的话,需要把局部变量名字改掉