美文网首页
js this 的绑定和函数作用域

js this 的绑定和函数作用域

作者: 天天快乐520 | 来源:发表于2017-12-06 16:25 被阅读0次
this:

在 JavaScript 中,上下文对象就是 this 指针,即被调用函数所处的环境。上下文对象 的作用是在一个函数内部引用调用它的对象本身。在 JavaScript 中,本质上,函数类型的变量是指向这个函数实体的一个引用,在引用之 间赋值不会对对象产生复制行为。我们可以通过函数的任何一个引用调用这个函数,不同之 处仅仅在于执行时候的上下文,可以通过bind,apply,call等改变this的指向。

function test() {
    var obj = {
        f: function() {
            console.log(this === window)
        }
    }
    return obj;
}

test().f() // 输出 false 因为f 执行时,是obj 的属性

function test() {
    var obj = {
        f: function() {
            console.log(this === window)
        }
    }
    return obj.f;
}

test()() // 输出 true test() 返回一个函数,(其实返回的函数是由一个临时变量应用的,在window作用域)

改变this
var myObj = {
    specialFunction: function () {
    },
    getAsyncData: function (cb) {
        cb();
    },
    render: function () {
        var that = this;
        this.getAsyncData(function () {
            that.specialFunction();
        });
    }
};

myObj.render();

或者render这样写

render: function () {

    this.getAsyncData(function () {

        this.specialFunction();

        this.anotherSpecialFunction();

    }.bind(this));

}

Function.prototype.bind = function (scope) {
    var fn = this;
    return function () {
        return fn.apply(scope);
    };
}
函数作用域

函数作用域的嵌套关系是定义时决定的,而不是调用时决定的,也就 是说,JavaScript 的作用域是静态作用域,又叫词法作用域,这是因为作用域的嵌套关系可 以在语法分析时确定,而不必等到运行时确定

var a=1;
function test(){
    var a=2;
    return function(){
        console.log(a)
    }
}
test()(); // 输出 2  闭包是(函数作用域的问题)

相关文章

  • 闭包

    js的作用域分为全局作用域,和函数作用域, 内部作用域可以访问外部作用域的函数参数,外部不能访问内部函数的变量和参...

  • 你不知道的JS-上卷

    作用域整体理解:JS作用域分为函数作用域,全局作用域,with和try catch形成的块级作用域。 JS引擎在编...

  • js 的变量提升和函数提升

    1. 深入理解 js 的变量提升和函数提升 先了解:js没有块级作用域,只有全局作用域,和函数作用域 相同的函数名...

  • js this 的绑定和函数作用域

    this: 在 JavaScript 中,上下文对象就是 this 指针,即被调用函数所处的环境。上下文对象 的作...

  • React基础第二节知识点

    1.绑定事件使用原生绑定事件onClick2.绑定事件函数必须传this(原生JS this作用域的问题)3.使用...

  • js 闭包

    一、js 作用域 讲闭包首先就要理解 js 的作用域。再 ES5 中,js 有两种作用域,全局作用域和函数作用域(...

  • 作用域

    作用域:定义了变量或函数的可访问范围,JS只有两种作用域:全局作用域和函数内部作用域

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • JS作用域链

    1. 作用域 JS中的变量和函数并不总是可用的,有其使用的范围,这就是作用域。 JS的作用域靠函数形成,函数内声明...

  • JavaScript 05 函数

    js函数的概念和作用,js函数的定义,js函数的调用,js事件驱动的概念,js函数的实参和形参,js的作用域,js...

网友评论

      本文标题:js this 的绑定和函数作用域

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