day1(2019-2-11)

1. 变量(全局 和 局部)

 

关于--变量提升:

var声明的变量有变量提升,会提升到全局或者当前函数体的顶端

Es6的提出块级作用域的概念,let和const存在TDZ临时死区概念,不存在变量提升

Example:

function test() {

//TDZ临时死区开始

console.log(a) // a is not defined!

//TDZ临时死区结束

let a;

console.log(a) //undefined

}

test()

 

2. 关于变量报错时,是undefined还是is not defined

Example:

console.log(a) //undefined

console.log(b)// error: b is not defined!

var a;

 

3. 函数表达式的两种形式:

a. 函数表达式:var a = function (){}

注意:当var a的表达式与之前声明的变量同名时,会将之前的变量覆盖。

b. 函数声明:function test() {}

 

4. 同名变量会覆盖:

Example:

var a = 10;

function test() {

var a = 20;

return function(){

a= 30

console.log(a)//30

}

}

test()();

 

5. 闭包的问题:

答案:遍历数组list时,把i分别等于01234时的值,保留在闭包中,当执行click事件时,确定取的是哪个闭包的值。

解法一:

var list = document.getElementsByTagName('li')

for(var i = 0; i < list.length; i ++) {

list[i].addEventListener('click', function(i) {

return function() {

alert(i +1)

}

}(i),true)

}

解法二:

for(var i = 0; i < list.length; i ++) {

let a = i //下标保存到块级作用域中

list[i].οnclick=function(){

alert(a+1)

}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


版权声明:本文为Allan_L原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。