Sun*_*waj 6 javascript use-strict
我在网站上看到以下内容:
Use-strict具有优势.它消除了这种强制.如果没有严格模式,则对null或undefined的此值的引用会自动强制转换为全局.这可能导致许多头屑和拔出你的头发类型的错误.在严格模式下,引用此值null或undefined会引发错误.
这到底是什么意思?use-strict与this强制有什么关系?
当您在javascript中调用函数时,"this"将根据上下文引用不同的内容:
如果函数已被绑定,则"this"将被设置为绑定的任何值,例如 fn.bind(x)()
如果使用fn.call(x)或调用该函数fn.apply(x),则将其设置为x.
如果使用箭头符号定义函数,那么this
将是定义this函数时定义的任何函数.
如果你用函数调用函数thing.fn(),那this就是'.'之前的东西,在这种情况下是'thing'.
如果您在构造函数中,则使用newthen this调用正在构造的新对象.
如果你只是调用一个裸函数,那不是任何对象,没有绑定,那不是一个箭头函数,而你是以直接的方式调用它,而不使用调用或应用,那么
this意志如果您不处于严格模式,则引用全局对象;如果处于严格模式,则引用未定义.这就是引用所谓的"这种强制".
这就是为什么,如果您打开浏览器控制台并键入
Function('console.log(this)')()
控制台将输出Window,它是浏览器中的全局对象.但是,如果您打开控制台并键入
Function('"use strict";console.log(this)')()
控制台将记录undefined.
我在这里使用Function构造函数,因为它是一种强制使用非严格模式的方法,无论它出现在什么情况下 - 所以这些示例仍然可以工作,即使你从一个文件或控制台中运行它们严格模式.
this 强制可以是获取全局对象最方便的方式,即
const global = Function('return this')()
即使在严格模式下,它也适用于浏览器和节点.
但是大多数情况下,你想要快速失败,并且你希望在特定类型的实例上运行的函数实际上对你的全局对象进行操作可能会使事情变得非常糟糕.尝试在this未定义时抛出异常或从抛出异常中读取内容几乎总是比读取和写入全局对象更好.
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |