js 作用域提升
1、预解析中,变量的提升,只会在当前的作用域中提升,提前到当前作用域的最前面。
2、函数的变量只会提前到函数作用域的最前面,不会出去影响全局的变量。
3、预解析会分段,多对 script 标签中函数重名,预解析的时候不会冲突。
console.log(foo);
function foo(){
console.log("foo"); // 打印出来的是函数
}
var foo = 1;
解析:在进入执行上下文时,首先会处理函数声明,其次是处理变量声明。如果变量名称跟已经声明的形式参数或函数名相同,则变量声明不会干扰已经存在的这类属性。
题目二:
var foo = 1;
function bar() {
foo = 10;
return;
function foo() {
}
}
bar();
alert(foo);
- 1
- 10
- Function
- undefined
- Error
答案:1
解答:上述代码考的是 js 作用域提升的问题。可以写成:
var foo = 1;
function bar(){
function foo(){
}; // 这里在内部定义了 foo 是一个函数
foo = 10; // 因此这里属于局部变量,不影响到外层的foo
return foo;
}
bar();
alert(foo) //1
// 在foo=10的时候,foo是有定义的,属于局部变量,影响不到外层的foo。
同理,下面这段代码答案也是 1
var foo = 1