您的位置:首页 > Web前端 > JavaScript

JS基本问题

2016-12-08 08:34 113 查看
问题1:Scope作用范围

考虑下面的代码

(function(){
var a=b=5;
})();
console.log(b);

什么会被打印到控制台上?

回答:上面代码会打印5.

诀窍:这里有两个变量声明,但a使用关键字var声明的,代表它是一个函数的局部变量.与此相反,b变成了全局变量.

诀窍:它没有启用严格模式,代码会引发ReferenceError的错误,b没有定义(b is not defined).请记住,严格模式,则需要明确指定,才能实现全局变量声明.比如,你应该写:

(function(){
"use strict";
var a=window.b=5;
})();
console.log(b);

2.问题2.声明提升

执行这段代码,输出什么结果.

function test(){
console.log(a);
console.log(foo());
var a=1;
function foo(){
return 2;
}
}

回答:这段代码的结果是undefined和2.

原因是,变量和函数的声明都被提前了(移到了函数的顶部),但变量不分配任何值.因此,在打印变量的时候,它在函数中存在(它被声明了),但它仍然是undefined.换句话说,上面的代码等同于以下内容:

function test(){
var a;
function foo(){
return 2;
}
console.log(a);
console.log(foo());
a=1;
}

test();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: