Javascript中this 的默认绑定

1.默认绑定 首先要介绍的是最常用的函数调用类型:独立函数调用。可以把这条规则看作是无法应用其他规则时的默认规则: 示例:

1function (){ 2 console.log(this.a); 3} 4var a = 2; 5foo(); //2

从上可以看到当调用foo()时,this.a 被解析成了全局变量a,通过分析this的调用位置可以得到this指向全局对象。 如果使用严格模式(strict mode),则不能将全局对象用于默认绑定,因此this会绑定到undefined:

1function foo(){ 2 "use strict"; 3 4 console.log(this.a); 5} 6var a = 2; 7foo();//TypeError:this is undefined

这里有一个微妙但是非常重要的细节,虽然this 的绑定完全取决于调用位置,但是只有foo()运行在非strict mode 下时,默认绑定才能绑定到全局对象;在严格模式下调用foo()则不影响默认绑定:

1function foo(){ 2 console.log(this.a); 3} 4 5var a = 2; 6 7(function(){ 8 "use strict"; 9 10 foo(); //2 11})(); 12

注意:通常来说你不应该在代码中混合使用strict 模式 和 非strict模式。整个程序要么严格要么非严格。然而,有时候你可能会用到第三方库,其严格程度和你的代码有所不同。

点赞
收藏

评论区

加载中...

相关推荐

Hook 规则 – React

Hook规则_Hook_是React16.8的新增特性。它可以让你在不编写class的情况下使用state以及其他的React特性。Hook本质就是JavaScript函数,但是在使用它时需要遵循两条规则。我们提供了一个来强制执行这些规则:只在最顶层使用Hook不要在循环,条件或嵌套函数中调用Hoo

Dubbo 扩展点加载机制:从 Java SPI 到 Dubbo SPI

!(https://oscimg.oschina.net/oscnet/up1aa4ada0efc8a144d35d25b3443d951c7e3.JPEG)SPI全称为ServiceProviderInterface,是一种服务发现机制。当程序运行调用接口时,会根据配置文件或默认规则信息加载对应的实现类。所以在程序中并没有直接指定使用接口

Python 回调和首参数绑定

函数参数的绑定和调用方式这里想讨论的问题是,如果把python的方法作为参数传递给其他对象调用,那么相应的python实例是如何绑定的?classC:defcallback(self):print('callback')@staticmeth

ES6中Generator理解

1\.生成器函数声明  function\ name(args){};2\.yield使用function hello(){    console.log('before hello');  //可看到hello()并不会立刻执行函数, 到第一次next调用时才会    var name 

12、ES6形参默认值

当定义函数的时候,可以给参数设置默认值。调用的时候不传递参数值,就使用默认值。例子1:普通函数,不传递参数值。默认全是undefined。functionadd(a,b,c){console.log(a,b,c);}add();//不传递参数是,默认参数值全是undef

JavaScript中实现函数重载和参数默认值

参数默认值是指在调用函数时,若省略了某个实参,函数会自动为该参数分配一个默认值,使得函数调用的方便性和灵活性大大提高。举个例子,比如PHP中的字符串截取函数substr(string,start,length),当不指定length时,函数将默认截取字符串中start位置到字符串结束,而如果指定了length,则截取从start位置开始的以len

Javascript中this 的默认绑定 - HelloWorld