本文主要介绍JavaScript中的变量作用域和提升的相关面试题,主要包括以下几个方面:
在JavaScript中,变量作用域分为全局作用域和局部作用域。
全局作用域是指在函数外部定义的变量拥有全局作用域,可以被任何函数访问。
var a = 10;
function foo() {
console.log(a);
}
foo(); // 输出10局部作用域是指在函数内部定义的变量拥有局部作用域,只能被函数内部访问。
function foo() {
var a = 10;
console.log(a);
}
foo(); // 输出10
console.log(a); // 报错:a is not definedJavaScript中的变量提升是指在函数作用域内,变量的声明会被提升到函数作用域的顶部。
function foo() {
console.log(a); // 输出undefined
var a = 10;
console.log(a); // 输出10
}
foo();上面的例子中,变量a在函数内部被声明,但是在声明之前就已经使用了,这时候变量a的值是undefined。
在JavaScript中,函数作用域是指在函数内部定义的变量拥有函数作用域,只能被函数内部访问。
function foo() {
var a = 10;
function bar() {
console.log(a);
}
bar(); // 输出10
}
foo();作用域链是指在函数嵌套的情况下,子函数可以访问父函数的变量。
function foo() {
var a = 10;
function bar() {
console.log(a);
}
return bar;
}
var baz = foo();
baz(); // 输出10闭包是指在函数内部定义的函数,可以访问外部函数的变量。
function foo() {
var a = 10;
function bar() {
console.log(a);
}
return bar;
}
var baz = foo();
baz(); // 输出10上面的例子中,函数bar是在函数foo内部定义的,但是函数bar仍然可以访问函数foo中的变量a,这就是闭包。
下面是一些关于JavaScript中变量作用域和提升的面试题。
var a = 10;
function foo() {
console.log(a);
var a = 20;
}
foo(); // 输出undefined在函数内部,变量a被声明了但是还没有赋值,所以输出undefined。
var a = 10;
function foo() {
console.log(a);
}
function bar() {
var a = 20;
foo();
}
bar(); // 输出10函数foo在函数bar内部被调用,但是函数foo中的变量a并没有被重新定义,所以输出10。
var a = 10;
function foo() {
console.log(a);
}
function bar() {
var a = 20;
return foo;
}
var baz = bar();
baz(); // 输出10函数bar返回了函数foo,所以变量a的值是在函数bar内部定义的,但是函数foo中的变量a并没有被重新定义,所以输出10。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com
