javascript严格模型的详细解释

javascript严格模型的详细解释
我们知道,Javascript是一种灵活的语言,它的灵活性也带来了很多的坑,当然,一些设计defects.such作为

变量是在没有声明的情况下赋值的,默认值是一个全局变量,例如
函数(){())
a = 3;
})();
console.log(窗口。一个); / /输出3
对象有多个属性名字,最后的分配会覆盖前面的属性的首选
var obj = { {
丙:3,
C:4
}
obj / / { 4 } C:
什么= =,喜欢类型的坑,数不胜数。毕竟,Javascript的父亲设计的语言,只有一个星期了,呵呵。

Javascript的严格模型是什么

在严格的Javascript模式中,Javascript的编写有一些限制,如果这些限制在严格的模式下被违反,代码就会被错误报告

首先,概述

除了正常的运行模式,ECMAscript 5加二操作模式:严格模式。顾名思义,这个模型允许Javascript运行更严格的条件下。

建立严格模型的主要目的如下:

消除一些不合理和unrigorous Javascript语法和减少一些奇怪的行为。

-消除代码运行中的不安全性,确保代码运行的安全性。

提高编译器的效率,提高操作速度

-为未来的Javascript新版本铺平道路。

严格的模式反映了Javascript更合理、更安全、更严谨的发展方向。包括IE 10在内的主流浏览器已经支持它,许多大型项目已经开始接受它。

另一方面,相同的代码在严格的模式下可能会有不同的操作结果,一些正常模式下运行的语句不会在严格的模式下运行。掌握这些内容有助于更详细更深入地理解Javascript,使您成为更好的程序员。

本文将对严格模型进行详细描述。

两。入口标志

进入严格模式的符号如下行:

使用严格;
旧版本的浏览器会把它当作普通字符串的一行,而忽略它。

三。如何调用

在严格模式下有两种调用方法,可以在不同的情况下使用。

3.1用于整个脚本文件

使用严格设置在脚本文件的第一行,整个脚本将以严格的方式运行。如果该行不在第一行,则它无效,整个脚本以正常模式运行。如果将不同模式的代码文件合并到一个文件中,则需要特别注意这一点。
使用严格;
console.log(这是一个严格的模型。);
console.log(这是正常的模式。);
上面的代码表明在一个页面中有两段Javascript代码,前面的脚本标记是严格的模型,而后一个则不是。

3.2个单一函数

严格使用在函数体的第一行,整个函数在严格的模式下运行。
函数严格(){
使用严格;
返回这是一个严格的模型。;
}
功能不严(){
返回这是正常模式;
}
3.3脚本

因为第一种调用方法不利于文件合并,所以最好借用第二种方法将整个脚本文件放在一个匿名函数中,然后立即执行
(函数(){())
使用严格;
这里的代码
});
四,语法和行为的变化

严格的模式使Javascript的语法和行为发生了一些变化。

4.1全局变量显式声明

在正常模式下,如果一个变量在没有声明的情况下被赋值,默认是一个全局变量。严格的模式禁止这种用法,并且必须显式声明全局变量。
使用严格;
v=1;
错误,没有v语句
对于(i = 0;i < 2;i + +){
错误,不,我声明
}
因此,在严格的模式下,必须用var命令声明变量,然后再使用。

4.2静态绑定

Javascript语言的一个特点是允许动态绑定,也就是说,哪些属性和方法属于编译时未确定的对象,而是在运行时(运行时)确定的。

严格的模式不允许动态绑定,只有静态绑定是允许的,也就是说,属性和方法属于哪个对象,必须在编译阶段确定,这将有助于提高编译效率,并使代码更容易阅读,并且不那么意外。

具体而言,它涉及以下几个方面。

(1)禁止使用声明

因为编译时无法确定带语句,该属性属于哪个对象。
使用严格;
var=1;
带(o){
语法错误
v=2;
}
(2)创建一个评估范围

在正常模式下,Javascript语言有两变量域(范围):全球范围和功能域。严格的模型创建第三个范围:评价范围。

在正常模式下,的eval语句的范围取决于它在全球范围或职能范围。严格模式,eval语句本身是一个范围,可以不再产生全局变量和变量的产生只能在eval使用。
使用严格;
变量x=2;
Console.info(eval(var x = 5;X)));
5
Console.info(X);
2
4.3加强安保措施

(1)禁止此关键字指向全局对象。
函数f(){
返回!这;
}
返回false,因为指的是全局对象这个false!
函数f(){
使用严格;
返回!这;
}

返回true,因为严格的模式,这个值是未定义的,所以这是真的!。

因此,当使用构造函数时,如果忘记添加新的,则不再指向全局对象,而是错误的。
函数f(){
使用严格;
这个= 1;
};
(f);
错误,这是没有定义的
(2)禁止遍历函数中的调用堆栈
函数f1(){
使用严格;
f1.caller;
/ /报错
f1.arguments;
/ /报错
}
(F1);
4.4禁止删除变量

在严格模式下不能删除变量。只有将可配置设置为对象的属性才能删除。
使用严格;
var x;
删除;
语法错误
var o = object.create(null,'x',{
值:1,
配置:真
});
删除OX;
删除成功
4.5显式错误报告

在正常模式下,对象的只读属性被赋值,它不会被错误地报告,但它只能默默地失败。在严格的模式下,它将被报告错误。
使用严格;
var;
object.defineproperty(O,V
O=2;
/ /报错
在严格的模式下,使用吸气剂方法读取的属性将被分配给错误。
使用严格;
var { { { {
获取v(){返回1;}
};
O=2;
/ /报错
在严格模式下,向未扩展的对象添加新属性将被报告错误。
使用严格;
var;
object.preventextensions(O);
O=1;
/ /报错
在严格模式下,删除非删除属性将为false。
使用严格;
删除Object.prototype;
/ /报错
4.6同样的错误

在严格的模式中加了几个语法错误。

(1)属性对象不能具有相同的

在正常模式下,如果对象具有多个属性名,则最后一个赋值的属性覆盖前面的值。严格模式下,这是一个语法错误。
使用严格;
var { { { {
p:1,
P:2
};
语法错误
(2)参数函数的名称不一样。

在正常模式下,如果参数函数有多个名称,可以使用参数{ }来读取。在严格模式下,这是一个语法错误。
使用严格;
函数f(a,a,b){
语法错误
返回;
}
4.7禁止八进制表示

在正常模式下,如果整数的第一个数字是0,则表示这是八进制数,如0100等于十进制64。严格的模型禁止这种表示,第一个整数是0,这将被错误地报告。
使用严格;
var = 0100;
语法错误
4.8个参数对象限制

参数是函数的参数对象,严格的模式限制了它的使用。

(1)不允许参数赋值。
使用严格;
参数+;
语法错误
var obj = {集P(参数){ } };
语法错误
尝试{ catch catch(参数){ }
语法错误
函数参数(){ }
语法错误
新函数()
语法错误
(2)参数不再跟踪参数的变化
函数f(a){
a = 2;
返回{,参数{ 0 } };
}
f(1);
/ /正常模式} { 2
函数f(a){
使用严格;
a = 2;
返回{,参数{ 0 } };
}
f(1);
/ /严格{ 2,1模式}
(3)禁止使用arguments.callee

这意味着不能在匿名函数内调用自己。
使用严格;
f(){ var函数返回参数。被叫;};
(f);
/ /报错
4.9个函数必须在顶层声明。

将来将在块级范围内引入一个新版本的Javascript,为了与新版本一致,严格模式只允许在全局范围或函数域中声明函数的顶层声明,换句话说,不允许在非功能代码块中声明函数。
使用严格;
如果(真){
函数f(){ }
语法错误
}
对于(var i = 0;i < 5;i + +){
函数F2(){ }
语法错误
}
4.10保留字

为了在将来过渡到新版本的Javascript,严格模式增加了一些保留字:实现、接口、让、包、私有、受保护、公开、静态、屈服。

将这些词用作变量名将为false。
函数包(受保护){
语法错误
使用严格;
VaR工具
语法错误
}
此外,ECMAscript第五版本身还指定了其他一些保留字:类、枚举、出口、进口、延伸、超。他们不能用,太。

以上内容是您介绍的Javascript严格模型的详细说明的全部内容。希望你能喜欢。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部