码迷,mamicode.com
首页 > 编程语言 > 详细

javascript的this问题

时间:2018-10-05 16:14:04      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:关于   赋值   pre   bsp   cti   lob   str   总结   函数   

  看过很多关于javascript中this指向的问题,现总结如下,如有不正确,欢迎指正。

  javascript中,this的指向并不是在函数定义的时候确定的,而是在其被调用的时候确定的。也就是说,函数的调用方式决定了this指向。记住:this 就是一个指针,指向我们调用函数的对象。

  在此将javascript中this的调用方式分为以下几种:

1、直接调用:

  直接调用是指通过 funName() 这种方式调用。此时,函数内部的this指向全局变量。

function foo() {
    console.log(this === global);
}
foo(); //true

  注意:直接调用并不是仅仅指在全局作用域下进行调用,而是说在任何作用域下通过funName() 这种方式调用。如下两个例子亦是属于直接调用方式:

  a、使用bind函数改变外层函数的作用域,然后在内层直接调用,其this指向依然是全局变量:

function foo() {
    console.log(this === global);
}

function foo1() {
    foo();
};
var foo2 = foo1.bind({}); //改变foo1函数的作用域
foo2(); //true 依然指向全局变量

  b、函数表达式,将一个函数赋值给一个变量,然后通过直接调用的调用方式调用此函数,其this指向依然是全局变量:

var obj = {
    foo: function(){
        console.log(this === obj);   //false
        console.log(this === global);//true
    }
}
var f = obj.foo;
f();

 

javascript的this问题

标签:关于   赋值   pre   bsp   cti   lob   str   总结   函数   

原文地址:https://www.cnblogs.com/chengbo-x/p/9744911.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!