js作用域(scope)的面试题
var n = 100
function foo() {
n = 200
}
foo()
console.log(n)
function foo() {
console.log(n)
var n = 200
console.log(n)
}
var n = 100
foo()
var a = 100
function foo() {
console.log(a)
return
var a = 200
}
foo()
function foo() {
m = 100 // 没有var来定义,但 line7 打印出100. 没有var等认为m定义在GO(全局)中.
}
foo()
console.log(m)
function foo() {
var a = b = 10
// => 转成下面的两行代码
// var a = 10
// b = 10 //执行顺序 先给b赋值,再给a赋值 从右向左
}
foo()
// console.log(a) // 报错,访问不了
console.log(b) // 10
参数的作用域(★★★)
var x = 0
// 当函数的参数有默认值时, 会形成一个新的作用域, 这个作用域用于保存参数的值
function foo(x, y = function() { x = 3; console.log(x) }) {
console.log(x)
var x = 2
console.log(x)
y()
console.log(x)
}
foo()
console.log(x)
// 参数作用域
// x = undefined
// y = function(){ x = 3 }
// undefined
// 2
// 3
// 2
// 0
node/浏览器运行查看结果!