function bar() {
return foo;
foo = 10;
function foo() {var a = 1}
var foo = function () {var a = 2}
var foo = 11;
}
console.log(bar());//ƒ foo() {var a = 1}
function bar() {
function foo() {var a = 1}
var foo = function () {var a = 2}
var foo = 11;
return foo;
foo = 10;
}
console.log(bar());//11
function bar() {
function foo() {var a = 1}
var foo = 11;
var foo = function () {var a = 2}
return foo;
foo = 10;
}
console.log(bar());//ƒ foo() {var a = 2}
- 变量提升与函数提升
- 变量提升: 在变量定义语句之前, 就可以访问到这个变量(undefined)
- 函数提升: 在函数定义语句之前, 就执行该函数
- 先有函数提升, 再有变量提升
var foo = 1
function bar() {
foo = 10
return;
function foo() {}
}
bar()
console.log(foo);//1
var foo = 1
function bar() {
foo = 10
return;
//function foo() {}
}
bar()
console.log(foo);//10
当在某个环境中为了读取或写入而引用一个标识符时,必须通过搜索来确定该标识符实际代表什么。
查找变量是沿着作用域链查找,查找属性是沿着原型链查找。