- 问题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();