1. 作用域
1.1 全局作用域
- 众所周知,js在引入块级作用域之前是没有块级作用域的。
- 全局作用域:在其他地方都能访问得到的地方。在js中,可以简单理解为在函数之外。
- 注意点:
var a = 123
b = 1234
delete a // false
delete b // true
/*
以上两种方式虽然都能在全局中访问,但是有很大区别:
1. 采用var声明的变量无法用delete删除(因为变量是无法删除的)
2. 采用第二种方式产生的“变量”,本质上是全局对象window的属性,
所以可以用delete操作符进行删除
*/
function test() {
c = 233
}
test()
console.log(c) // 233
/*
在函数中不使用var进行声明的“变量”,作为window的属性存在
*/
1.2 函数作用域
function test() {
var a = 3
return a + 4
}
console.log(test()) // 7
console.log(a) // Error: a is not defined
- 问题:
a
的生存期只在函数内部,那么如何在函数外部拿到a
的值?
答:使用return,或者使用闭包
1.3 块级作用域
1.4 动态作用域
window.a = 3
function test() {
console.log(this.a)
}
test()
test.bind({ a: 100})()
// this的指向改变了,函数在不同的情况下执行得到的结果可以是不同的
网友评论