美文网首页
JS 函数的上下文

JS 函数的上下文

作者: a5c0a9d9ccb8 | 来源:发表于2016-03-04 11:07 被阅读286次

    函数执行上下文,其实就是Javascript中代码的运行环境,可以通过this来访问函数的执行上下文。分为以下三种:

    • 全局级别的代码
      这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境。默认为window。
    • 函数级别的代码
      当执行一个函数时,运行函数体中的代码。
    • Eval的代码
      在Eval函数内运行的代码。

    注:call和apply通常用来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数

    例子1
    <pre>
    var seq = [1,2,3,4];
    for(var i in seq){
    var name = ‘zhou’ + i;
    window.setTimeout(function(){
    $('p’).apend(name);
    },i*1000);
    }
    </pre>
    有人可能认为输出是zhou1zhou2zhou3zhou4,实际上结果是zhou1zhou2zhou3zhou4。因为函数window.setTimeout(实际上我们常常会省略掉window)的上下文实际上是window,而函数体中的name实际上就是window.name。他的值就是最后一次循环后的值zhou4。<br />


    例子2
    <pre>
    var seq = [1,2,3,4];
    for(var i in seq){
    var name = ‘zhou’ + i;
    var obj = {};
    obj.name = name;
    obj.setTimeout = function(){
    var local = this; // 该方法是对象obj的属性方法,所以this就是obj
    window.setTimeout(function(){
    $('p’).apend(local.name); // 此处千万不可以用this,因为此处的this实际上是window。
    },i*1000)
    }
    }</pre>


    参考链接
    深入理解Javascript之执行上下文(Execution Context)
    javascript 函数执行上下文

    相关文章

      网友评论

          本文标题:JS 函数的上下文

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