var haha = 1;
(function () {
var haha = 10
var a = function () {
console.log(haha) // 这个隐蔽
}
a()
})()
console.log(haha)
先不说答案
var haha = 1;
(function () {
haha = 10
var a = function () {
console.log(haha) // 这个隐蔽
}
a()
})()
console.log(haha)
这个呢
var haha = 1;
(function () {
haha = 10
var a = function () {
console.log(haha) // 这个隐蔽
}
})()
console.log(haha)
那这个呢。
一切与浏览器跑的为基准, 说它沙雕我不知道考这种东西的意义何在。
第一题
里面输出 10 外面输出 1 函数内部作用域 没啥好说的对吧。
第二题
内部函数 作用域改变了外部 所以输出都是 10
第三题
外部输出10,里面根本就没调用。我就说出这种题的人是闲的。
在看下面这道沙雕面试题
var i
var a = function () {
var arr = []
for(i = 0; i < 3; i++){
arr.push(function () {
console.log(i)
})
}
return arr
}
var b = a()
console.log(b[0])
console.log(b[2])
是啥
明确的 说
f() {
console.log(i)
}
console.log(b[0] ()) // 3
console.log(b[2] ()) // 3
函数 执行的时候,for 循环早执行完了 ,所以是3。
所以 哪怕得到了答案,依旧 不知道他要考啥。
//找出this 指向
这里说一句网上关于的this 的指向,谁调用指向谁的说法是错误的,或者说不全对。
const foo = {
bar: 10,
fn: function () {
console.log( this )
console.log( this.bar )
}
}
var fn1 = foo.fn
fn1()
根据谁调用指向谁的话,不好意思,这里的this 指向window,虽然fn在 foo 对象中被引用,但是赋值 给 fn1 之后, fn1 的执行环境 仍然是在window 全局环境中。因此输出 window 和 undefined,它们相当与。
console.log(window)
console.log( window.ba)
如果将上面题目变换一下
const foo = {
bar: 10,
fn: function() {
console.log(this)
console.log(this.bar)
}
}
foo.fn()
这次的this 指向就是对的 { bar:10 , fn:f } 10 将输出这俩。
因为 这个时候this 指向的是最后调用它的对象,
小结一下:执行函数时,如果函数中的this 是被上一级调用,那么this 就指向上一级对象,否则就指向全局。
文章采用 知识共享署名 4.0 国际许可协议 进行许可,转载时请注明原文链接。