javascript的this问题
Posted Chengbo_X
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript的this问题相关的知识,希望对你有一定的参考价值。
看过很多关于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问题的主要内容,如果未能解决你的问题,请参考以下文章
代码片段使用复杂的 JavaScript 在 UIWebView 中插入 HTML?
如何将此 JavaScript 代码片段翻译成 Parenscript?
VSCode自定义代码片段12——JavaScript的Promise对象