在全局作用域中,声明的变量和函数都会作为window对象的属性和方法。
function f(){}
a = 10
console.log(window.f)
console.log(window.a)
- 被var声明过的变量对进行提前声明
console.log(a)
fun()
var a = 10
var fun = function (){
console.log('fun...')
}
此时的代码相当于
var a = undefined;
var fun = undefined
console.log(a)
fun()
a = 10
fun = function (){
console.log('fun...')
}
- 值得注意的是,函数声明的方式会将整个函数提升
console.log(a)
fun()
var a = 10
function fun() {
console.log('fun...')
}
此时便不会再报fun is not a function 错误,注意只有函数声明的方式才会将函数提升。
函数体内的作用域
function fun(){
console.log(b)
var b = 13
console.log(b)
}
fun()
此时,函数内用var声明的变量也会进行提前声明。
- 函数内不使用var进行声明的变量也会作为window的属性
function fun(){
a = 15
console.log(b)
var b = 13
console.log(b)
}
fun()
console.log(window.a)
- 函数的形参也会当做var变量进行提前声明
function fun(a,b,c){
var a = undefined
var b = undefined;
var c = undefined
//对形参进行赋值。。。。。
}
fun()