javascript严格模式this的简单介绍

今天给各位分享javascript严格模式this的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、JS中为什么object中,this指向window?2、JAVASCRIPT中的this到底是谁3、在严格模式下进行javascript有什么好处4、在javascript中,function里this的指向是怎样的?5、javascript严格模式下有哪些不同6、[JS] 先bind后new,this的指向

JS中为什么object中,this指向window?

刚开始学,很容易对javascript中的this搞得晕头转向,因为它指向谁,取决于它所在的地方。

在方法中,this 表示该方法所属的对象。

如果单独使用,this 表示全局对象。

在函数中,this 表示全局对象,在严格模式下,this 是未定义的(undefined)。

在事件中,this 表示接收事件的元素。

类似 call() 和 apply() 方法可以将 this 引用到任何对象。

你这个例子里就属于单独使用,所以这里的this代表的是全局对象,浏览器环境下就说window了。

把你的例子稍微改一下:

var obj = {

a: 20,

b: function(){ return this.a+= 10 }

}

这时候执行 obj.b(),就发现这里的this指向的是obj了,也就算上述的第一条。关于this的指向要多练习,多思考,因为它确实乱糟糟,所以在ES6中出现了箭头函数,缓解了这个噩梦。

javascript严格模式this的简单介绍

JAVASCRIPT中的this到底是谁

全局对象

在全局执行上下文(函数之外),this引用的是全局对象.

函数

在函数里面,this这个值,得看怎么来调用这个函数

.没有申明为严格模式下,this必须要有一个值去赋予.默认情况下就是指向的是全局对象

严格模式下, this没有被申明,则为undefined.他也可以是任何值,比如null或者42或者其他.

当一个函数作为一个对象的方法去调用,this指向的是对象本身.

对象原型链中的this 是继承的原型类对象

在严格模式下进行javascript有什么好处

非严格模式下有些写法其实是不大符合逻辑的,比如不用var来声明变量就算是个全局变量就可以直接用这种。

严格模式与非严格模式的区别在于以下几点

1,全局变量的显示声明

2,严格模式限制了动态绑定,比如禁止使用with,创设eval的单独作用域

3,严格模式下让你头痛的this关键字不能指向全局变量了

4,不能重名:对象不能有重名属性,方法不能有重名形参

5,对于arguments的限制,严格模式下不能对其赋值了,也不再跟踪参数的变化,arguments.callee也不允许使用

6,函数必须声明在顶层,不允许在非函数代码块内声明函数

严格模式还有一个作用就是为以后JS的标准化做铺垫。严格模式下多了很多关键字如public private如果你懂JAVA,或C#你会明白这是什么意思

在javascript中,function里this的指向是怎样的?

Javascript中一个函数的this关键字的行为相对其它语言有些不同。在严格模式和非严格模式间也有区别。

在大多数情况下,this的值由函数如何调用来决定。this值不能在函数执行过程中赋值设置,并且每次函数调用时this值可能也不相同。ES5通过添加bind方法设置函数的this值,无论函数如何被调用。(this值永久不变)

全局上下文中:

    全局执行环境中(函数外部),无论在与不在严格模式下this指向全局对象。

    console.log(this.document === document); //true

    //在web浏览器中,window对象即是全局对象:

    console.log(this === window); // true

    this.a=37;

    console.logn(window.a); //37

    function上下文

    在函数内部,this值依赖于函数如何调用。

简单调用:

    function f2(){

        “use strict”;//使用严格模式

        return this;

    }

    f2() === undefined;

javascript严格模式下有哪些不同

严格模式声明:“use strict”;

1、禁止变量未声明就赋值

2、限制动态绑定(属性和方法归属哪个对象在编译阶段就要确定)

1)禁止使用with

2)创建eval作用域,eval内声明的变量外部访问不到

3、增强的安全措施

1)禁止this关键字指向全局对象

2)禁止在函数内部遍历调用栈(函数内访问functionName.caller/functionName.arguments均报错)

4、禁止删除变量(只有configurable设置为true的对象属性才能被删除)

5、对只读属性赋值将会报错

6、重名错误

1)函数参数不能重名

7、禁止以零(0)开头的8进制表示法,支持数字0加字母o:“0o”为前缀表示八进制数

8、arguments的限制

1)arguments本身不能被赋值 ,但是arguments[x]仍然可以

2)arguments不再追踪参数的变化,在函数内改变参数值,arguments依然指向旧值

3)禁止使用arguments.callee,匿名函数无法调用自己了

9、函数必须在顶层声明

10、不允许使用以下保留字做变量名

1)implements

2)interface

3)let

4)package

5)private

6)protected

7)public

8)static

9)yield

[JS] 先bind后new,this的指向

非严格模式下,以下调用方式中, this 绑定为全局对象 window ,

而在严格模式下, this 绑定为 undefined 。

值得注意是的,只有 this 处于严格模式中,才会绑定为 undefined ,

与 f 被调用的位置是否处于严格模式无关。

可见 new 对 this 的影响比 bind 优先级要高,

g 虽然通过 bind 绑定了 this 指向的对象为 {a:1} ,

但是使用 new g 调用的时候, this 仍然指向以 f 为构造函数的实例。

值得注意的有两点,

(1) bind 之后, g.prototype 为 undefined 。

(2) new g 返回的对象 obj ,使用 instanceof 判断 f 和 g 都为 true ,

原因就在于, V instanceof target 首先会先用 target[Symbol.hasInstance](V) 来判断,

然后再判断, target.prototype 是否在 V 的原型链上,参考 ECMAScript Language Specification

但是 bind 的柯里化作用还是有用的,

使用 call 或者 apply ,将 this 绑定为 null 或 undefined 并不会凑效,

此时, this 将绑定为全局对象。

然而,在严格模式下, this 将绑定为 null 或 undefined ,

值得一提的是,在非严格模式下, f.call(1); 会自动将 1 包装成 new Number(1) ,

然后 this 指向的是这个包装对象。

而在严格模式下, f.call(1); 会将 this 绑定为 1 。

b={} 相当于 b=new Object ,因此, b 是 Object 构造函数的实例。

而 Object.create(null) 会创建一个空对象,它没有原型。

注意, Object.create(undefined); 会报错,

赋值表达式的返回值是函数的引用,因此相当于 f() ,

而不是 obj1.f() ,也不是 obj2.f() 。

你不知道的JavaScript(上卷)

关于javascript严格模式this和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月30日 00:22:59
下一篇 2024年3月30日 00:30:19

相关推荐

  • linux下如何进入root的简单介绍

    为什么在LINUX里面不能切换到root用户? 1、命令模式下直接用su,然后输入密码就可以了,像ubuntu如果还没有为root设置密码的话,可以用第一个用户(它默认有权使用sudo命令)来设置密码,sudo passwd root。如果在桌面模式当然也一样了。 2、很多朋友都想知道linux下怎么切换到root?下面就一起来看看吧!linux下怎么切换到…

    2024年5月18日
    3400
  • 学习监督黑客的简单介绍

    数据安全监测管理应做哪些工作 1、法律分析:开展数据处理活动应当依照法律、法规的规定,建立健全全流程数据安全管理制度,组织开展数据安全教育培训,采取相应的技术措施和其他必要措施,保障数据安全。 2、主要包括合规控制、风险控制、管理控制等方面;四是推进智能电网信息系统安全接入,按照国家电网公司统一坚强智能电网信息安全总体方案要求,研究重庆公司用电采集系统、输电…

    2024年5月18日
    6300
  • 香蕉地c语言的简单介绍

    c语言的编译器,打开同一个程序,一样的输入,为什么有时输出是对的,有… 1、应该是两种环境下保存的源代码的格式有异。最好找个专业的文本编辑器来编辑源代码,然后再用TC来编译。比如说ULTRAEDIT。这样会省去很多麻烦。你也可以把这个工具打造成脱离TC的IDE环境的编辑,编译工具。 2、你第一个程序不报错的原因是,你把后缀名改成了.cpp2,编译…

    2024年5月18日
    3600
  • linuxrpm官网下载的简单介绍

    Linux可以用rpm下载yum或者wget或apt-get吗? 1、)rpm包,如software-3-i38rpm。他是Redhat Linux提供的一种包封装格式。包的管理工具YUM 3)dpkg包,如software-3-deb。他是Debain Linux提供的一种包封装格式。 2、可以下载安装也可以网络安装。网络安装你必须在yast里添加尽可能多…

    2024年5月18日
    4700
  • javabase64使用的简单介绍

    在Java中如何进行BASE64编码和解码 1、为了避免这种情况,您可以将字符串转换为字节数组,然后再进行Base64编码和解码。您可以使用Java的getBytes()方法将字符串转换为字节数组,并使用new String()方法将字节数组转换回字符串。 2、Java中的decodeResponse方法是一个将Base64编码后的字符串解码为字节数组的方法…

    2024年5月18日
    3600
  • deepinlinux操作系统的简单介绍

    linuxdeepin支持什么软件(deepin安装软件命令) 首先启动CrossOver,首页面分成了两部分,右侧是已安装软件,左侧就是安装功能了。我们点击“安装Windows软件…”。软件会弹出的新页面,这个页面分成了好几部分。 首先,需要用户点击dock栏上的”启动器“找到终端并运行。deepin linux下怎么在终端安装百度云 然后,执…

    2024年5月18日
    4200
  • 能不能从零学习黑客的简单介绍

    零基础学习黑客知识先看王爽的《汇编语言》和《深入了解计算机系统》行… 只要你下定决心想做一件事情,我觉得看什么书,都是可以的。 《编码:隐匿在计算机软硬件背后的语言》 ,这本书真的浅显易懂,从与非门到寄存器,再组成RAM,主要帮助你理解电信号如何转换成二进制!你看完加运算的进位电路设计就会明白“溢出”是怎么一回事了。 先看,王爽《汇编语言》 ,适…

    2024年5月18日
    3600
  • excel2010打开密码移除工具的简单介绍

    excel密码清除工具怎么使用 1、步骤一:打开加密excel表格 ,输入密码进入。 2、使用在线服务进行解锁:在搜索引擎中搜索“Excel 解锁工具”或“Excel 密码恢复”,可以找到一些在线服务,例如 LostMyPass、FreeMyPDF 等。 3、首先点击选中被加密的表格文档,按F2重命名,把文件格式改为RAR。鼠标左键双击打开该文件,并打开XL…

    2024年5月18日
    4100
  • 百度黑客学习励志头像的简单介绍

    有含义励志的微信头像 1、断翼の天使男销售用的微信头像。明日辉煌男生励志头像简单气质。再不努力我们就老了适合永久做头像的图片2021。 2、男人专用头像图片:求求几张励志的男生用的头像图片有没有 励志头像。男人专用头像图片:四十岁的男人用什么头像图片 四十岁成熟男人头像看不到脸,西装革履有范儿男生干净简约网名。 3、有品位的微信头像:谁有,有寓意的微信头像,…

    2024年5月18日
    2900
  • javascript中逻辑非,js中逻辑或

    javascript中为什么有时候会使用双逻辑非运算符的 1、说明 所有一元运算符,如 ~ 运算符,以如下规则来求表达式的值: 如果将它用于 undefined 或 null 表达式,则产生一个运行时错误。 对象被转换成字符串。 如果可能,字符串被转换为数字。 2、JS双竖线运算符:是或比较。如null||‘1’,返回’1’;‘2’||‘1’,返回’2’。即…

    2024年5月18日
    3500

发表回复

登录后才能评论



关注微信