作用域和闭包
- 执行上下文
console.log (a) //undefined
var a =100
fn('zs')
function fn(name){
age =20
console.log(name,age)//zhangsan ,20
var age
}
范围:一段<script>或者一段函数
全局:变量定义,函数声明
函数:变量定义、函数声明、this、arguments。
函数声明和函数表达式的区别
在js代码执行前会将所有的所有的函数声明拿出来,提前赋值undefined;
this
要执行时候才能确认值,定义时无法确认。
var a = { name:'A' ,fn:function(){ console.log(this.name) } } a.fn() //this === a a.fn.call({name:'B'}) //this === {name:b} var fn1 = a.fn fn1() //this === window
作为构造函数执行
- 作为对象函数执行
- 作为普通函数执行
- call apply bind
作用域
- 没有块级作用域
- 只有函数和全局作用域
if(true){ var name ='zs' } console.log(name) // 函数和全局作用域 var a =100 function fn(){ var a = 200 console.log('fn',a) } console.log('global',a) fn()
- 作用域链
- 闭包