js函数作用域中的优先级
首先直接上结论:变量提升 < 传参 < 函数体 < 首行赋值
- 变量提升
function fn(){
console.log(a)
var a = 1
}
fn() //输出为 undefined
如果将var替换成ES6中的let和const会因为暂时性死区而报错
- 传参
function fn(a){
console.log(a)
var a = 1
}
fn(2) //输出为2
从而可以得出,变量提升的优先级低于函数传参
- 函数体
function fn(a){
console.log(a)
var a = 1
function a(){
return 2
}
}
fn(3) //此时输出为 a函数体
从而可以得出,内部函数体优先级高于函数传参
- 首行赋值
function fn(a){
var a = 4
console.log(a)
var a = 1
function a(){
return 2
}
}
fn(3) //输出为4
从而可以得出,首行赋值的优先级是大于内部函数体的