1.变量提升
这里相当于在函数体内部先var a , console.log(a),a=4
var a = 3
function fn () {
console.log(a)
var a = 4
}
fn()//undefined
2.测试题
测试题3:
*/
var c = 1
function c(c) {
console.log(c)
var c = 3
}
c(2) // 报错
相当于
var c
function c( c ){
console.log( c )
var c =3
}
c=1
c(2)
3.作用域
这里全局里有两个函数作用域,在函数show()中执行fn(),所以fn()要去找x的值,自身没有,去全局找,找到,结果为x = 10
var obj = {
fn2: function () {
console.log(fn2)
//console.log(this.fn2)
}
}
obj.fn2()
这道题会报错,找不到fn2,因为在函数作用域找,找不到,去全局找,没有,要想找到那个fn2,就要this.fn2
4.闭包(这里较复杂的题还是不懂,有时间去知乎找找,加深下理解)
1.闭包的作用
(1)使用函数内部的变量在函数执行完后, 仍然存活在内存中(延长了局部变量的生命周期)
(2)让函数外部可以操作(读写)到函数内部的数据(变量/函数)
2.如何产生闭包?
当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时, 就产生了闭包
4.闭包到底是什么?
使用chrome调试查看
理解一: 闭包是嵌套的内部函数(绝大部分人)
理解二: 包含被引用变量(函数)的对象(极少数人)
注意: 闭包存在于嵌套的内部函数中
5.事件处理机制
模型的运转流程
- 执行初始化代码, 将事件回调函数交给对应模块管理
- 当事件发生时, 管理模块会将回调函数及其数据添加到回调列队中
- 只有当初始化代码执行完后(可能要一定时间), 才会遍历读取回调队列中的回调函数执行