美文网首页
函数:作用域、闭包

函数:作用域、闭包

作者: 码字仓颉 | 来源:发表于2017-12-29 00:20 被阅读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

  • 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
  • 使用场景
    • 作为造函数执行
    • 作为对象属性执行
    • 作为普通执行函数
    • call apply bind

3、作用域

  • JS没有块级作用域
  • 有函数作用域和全局作用域

4、作用域链

5、闭包

  • 闭包的使用场景

    • 函数作为返回值
      function F1(){
          var a = 100;
          //返回一个函数
          return function(){
              console.loe(a); //a是自由变量,在父作用域中找
          }
      }
      var f1 = F1();
      var a = 200;
      f1(); // 100    作用域不变,还是函数定义时的作用域
      
    • 函数作为参数传递
      function F1(){
          var a = 100;
          //返回一个函数
          return function(){
              console.loe(a); //a是自由变量,在父作用域中找
          }
      }
      function F2(fn){
          var a = 200;
          fn();
      }
      var f1 = F1();
      F2(f1); //100
      

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

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

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

相关文章

  • 14.JS基础之作用域与闭包

    作用域: 全局作用域 函数作用域 块级作用域(ES6新增) 常见的闭包有:作为函数返回值的闭包与作为函数参数的闭包...

  • 作用域和闭包

    目录 概述 作用域编译过程词法作用域全局作用域函数作用域 闭包循环和闭包闭包的用途性能 总结 概述 作用域和闭包一...

  • 2018-01-07 关于javascript闭包和作用域的理解

    关于 javascript 闭包的一些思考 作用域 词法作用域 函数作用域 块作用域 闭包 什么是作用域? 作用域...

  • 如何理解闭包?

    1、定义: 嵌套在函数作用域中的函数,称为闭包函数。该作用域称为闭包环境。通过闭包函数可以访问闭包函数所在函数作用...

  • JS面试常见问题汇总

    1、闭包 什么是闭包? 闭包就是可以访问另一个函数作用域中的变量的函数。 闭包的作用域链包含着它自己的作用域,以及...

  • 作用域、作用域链、闭包、面向对象、执行上下文

    作用域 作用域链 函数的提前声明 闭包 JavaScript 闭包与类(原型链)之间的开发方式 构造函数和普通函数...

  • 内存泄漏

    闭包 在闭包中,内部函数引用外部函数变量,实际上是应用了外部函数的作用域(scope)对象 如果作用域对象所在函数...

  • 所谓闭包

    所谓闭包 Closures (闭包)是使用被作用域封闭的变量,函数,闭包等执行的一个函数的作用域。通常我们用和其相...

  • JS闭包,函数间的连接纽带

    闭包是什么? 闭包就是有权访问另一个函数作用域的变量的函数。 作用域: function foo (){ va...

  • python作用域

    变量作用域 local 局部作用域 global 全局作用域 enclosing 闭包-函数作用域 built-i...

网友评论

      本文标题:函数:作用域、闭包

      本文链接:https://www.haomeiwen.com/subject/ipvbgxtx.html