函数:作用域、闭包

2017-12-29  本文已影响0人  码字仓颉

问题

1、变量提升

知识点变量定义、函数声明、函数表达式

2、说明一下this的几种不同使用场景

3、创建10个<a>标签,点击的时候弹出对应序号

//错误写法
var i,a;
for(i=0; i<10; i++){
    a =document.creatElement('a');
    a.innnerHTML = i + '<br>'
    a.addEventListenter('click',function(e){
        e.preventDefault();
        alert(i);
    });
    document.body.appedChild(a);
}

//正确写法
var i;
for(i=0; i<10; i++){
    (function(i){
        a =document.creatElement('a');
        a.innnerHTML = i + '<br>'
        a.addEventListenter('click',function(e){
            e.preventDefault();
            alert(i);
        });
        document.body.appedChild(a);
    })(i);
}

4、如何理解作用域

全局作用域、函数作用域、作用域链、闭包

5、实际开发中闭包的应用

//闭包实际中应用主要用于封装变量,收敛权限
function isFirstLoad(){
    var _list = []; //封装变量,外界无妨访问
    return functon(id){
        if(_list.indexOf(id)>=0){
            return false;
        } else {
            _list.push(id)
            return true;
        }
    }
}
var firstLoad = isFIrstLoad();
firstLoad(10); //true
firstLoad(10); //false
firstLoad(20); //true

知识点

1、执行上下文

2、this

var a = {
    name: "A",
    fn: function(){
        console.log(this.name);
    }
}
a.fn(); //"A" ,              this === a
a.fn.call({name:"B"}) //"B", this === {name:"B"}
var fn1 = a.fn
fn1(); //                    this === window

3、作用域

4、作用域链

5、闭包

6、函数声明和函数表达式

fn1() //可执行
function fn1(){
###     //函数声明,函数声明会提升,可以在函数声明前执行函数
}

fn2() //undefine
var fn2 = function(){
    //函数表达式,变量提升,但fn在此之前是undefine,不能在表达式前执行函数
}
上一篇 下一篇

猜你喜欢

热点阅读