【转】js面试笔试---js的严格模式

1、必须用var关键字初始化变量

2、不能使用with关键字(1、with效率低下 2、可能导致内存泄露)

3、严格模式写会出现会出现除了全局作用域和局部作用域之外的第三种作用域eval作用域

4、为了安全,全面禁止this关键字指向全局window对象

5、为了安全,禁止函数内部调用栈

6、为了安全,禁止删除变量,对象的成员变量可以删除

7、普通模式写对一个对象的只读属性赋值,不会成功,但是也不会报错,在严格模式下会直接报错

8、严格模式下,对禁止扩展的对象添加属性,会报错

9、严格模式下,重名属性报语法错误

10、严格模式下,重名参数报语法错误

11、禁止八进制的使用(数字不能以0开头)

12、对arguments进行了严格的限制
* 1、arguments不能被赋值
* 2、arguments不对元素进行追踪
* 3、无法使用arguments.callee递归调用

13、函数必须声明在顶层,将来js将引入块级作用域(不允许在非函数代码块中声明函数)
* 1、arguments不能被赋值

14、严格模式下,一些新增了一些保留关键字,implements,interface,let,package,private,protected,public,static,yield
* 不准许使用

 


 
 
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>js的严格模式 </title>
  6. <script>
  7. /*******************************************************************************/
  8. /*
  9. * 1、必须用var关键字初始化变量
  10. * */
  11. //非严格模式
  12. // i=1;
  13. // alert(i);//执行成功
  14. // "use strict"
  15. //严格模式
  16. //i=1;
  17. // alert(i);//i is not defined
  18. /*******************************************************************************/
  19. /*2、不能使用with关键字(1、with效率低下 2、可能导致内存泄露)*/
  20. //2.1内存泄露的实例
  21. // function foo(obj) {
  22. // with (obj) {//Uncaught SyntaxError: Strict mode code may not include a with statement
  23. // a = 2;
  24. // }
  25. // }
  26. //
  27. // var o1 = {
  28. // a: 3
  29. // };
  30. //
  31. // var o2 = {
  32. // b: 3
  33. // }
  34. //
  35. // foo(o1);
  36. // console.log(o1.a); //2
  37. //
  38. // foo(o2);
  39. // console.log(o2.a); //underfined
  40. // console.log(a); //不好,a被泄漏到全局作用域上了
  41. //2.2性能降低
  42. /*
  43. * 原因是 JavaScript 引擎会在编译阶段进行数项的性能优化 出现了 with 部分完全不做任何优化
  44. *
  45. * */
  46. /*******************************************************************************/
  47. /*3、eval关键字
  48. * 1、严格模式写会出现会出现除了全局作用域和局部作用域之外的第三种作用域eval作用域
  49. * 2、
  50. *
  51. * */
  52. //非严格模式
  53. // eval("var x=100; alert(x)");//弹出100
  54. // alert(x);//弹出100
  55. //
  56. // //严格模式
  57. // "use strict"
  58. // eval("var x=100;alert(x)")//100
  59. // alert(x);//x is not defined
  60. /*******************************************************************************/
  61. /**
  62. * 4、为了安全,全面禁止this关键字指向全局window对象
  63. */
  64. //非严格模式
  65. // var abc= function () {
  66. // console.log(this);//Windows对象
  67. // }
  68. // abc();
  69. //严格模式
  70. // "use strict"
  71. // var abc=function () {
  72. // console.log(this);
  73. // }
  74. // abc();//undefined
  75. // //一般用构造方法给对象的属性赋值会报错
  76. // var dog= function (name) {
  77. // this.name=name;
  78. // this.say=function () {
  79. // alert("啊呜啊呜!")
  80. // };
  81. // }
  82. // obj("旺财");
  83. /*******************************************************************************/
  84. /**
  85. * 5、为了安全,禁止函数内部调用栈
  86. */
  87. // var fn=function () {
  88. // //'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
  89. // alert(fn.arguments.length);
  90. // }
  91. // fn();
  92. /*******************************************************************************/
  93. /**
  94. * 6、为了安全,禁止删除变量,对象的成员变量可以删除
  95. */
  96. //非严格模式
  97. // var x=100;
  98. // delete x;
  99. // alert(x=100);//弹出100 删除无效 但是不报错
  100. // var obj={};
  101. // obj.x=100;
  102. // delete obj.x;
  103. // alert(obj.x);//undefined 删除成功
  104. //严格模式
  105. // "use strict"
  106. // var x=100;
  107. // delete x;
  108. // alert(x=100);//Delete of an unqualified identifier in strict mode.直接报错
  109. // var obj={};
  110. // obj.x=100;
  111. // delete obj.x;
  112. // alert(obj.x);//undefined 删除成功
  113. /**
  114. * 7、普通模式写对一个对象的只读属性赋值,不会成功,但是也不会报错,在严格模式下会直接报错
  115. */
  116. /**
  117. * 8、严格模式下,对禁止扩展的对象添加属性,会报错
  118. */
  119. //普通模式
  120. // var obj={};
  121. // obj.x=100;
  122. // Object.preventExtensions(obj);
  123. // obj.y=200;
  124. // console.log(obj);//不报错 不修改
  125. //严格模式
  126. // "use strict"
  127. // var obj={};
  128. // obj.x=100;
  129. // Object.preventExtensions(obj);
  130. // obj.y=200;
  131. // console.log(obj);//Cannot add property y, object is not extensible 报错
  132. /**
  133. * 9、严格模式下,重名属性报语法错误
  134. */
  135. //普通模式
  136. // var obj9={
  137. // x:100,
  138. // x:200
  139. // }
  140. // console.log(obj9);//属性覆盖,不报错
  141. //严格模式
  142. // "use strict"
  143. // var obj9={
  144. // x:100,
  145. // x:200
  146. // }
  147. // console.log(obj9);//直接报错
  148. /**
  149. * 10、严格模式下,重名参数报语法错误
  150. */
  151. //普通模式
  152. // var obj10=function (x,x,y) {
  153. // console.log(arguments[0]);
  154. // console.log(arguments[1]);
  155. // console.log(arguments[2]);
  156. // }
  157. // obj10(1,1,2);//1 1 2
  158. //严格模式
  159. // "use strict"
  160. // var obj10=function (x,x,y) {
  161. // console.log(arguments[0]);
  162. // console.log(arguments[1]);
  163. // console.log(arguments[2]);
  164. // }
  165. // obj10(1,1,2);//1 1 2//Duplicate parameter name not allowed in this context
  166. /**
  167. * 11、禁止八进制的使用(数字不能以0开头)
  168. */
  169. //普通模式
  170. // var i=0111;
  171. // console.log(i);//73
  172. //严格模式
  173. // "use strict"
  174. // var i=011;
  175. // console.log(i);//Octal literals are not allowed in strict mode.
  176. /**
  177. * 12、对arguments进行了严格的限制
  178. * 1、arguments不能被赋值
  179. * 2、arguments不对元素进行追踪
  180. * 3、无法使用arguments.callee递归调用
  181. */
  182. //普通模式
  183. // var obj=function () {
  184. // arguments=100;
  185. // };
  186. // obj();//不报错
  187. // var fn=function (num) {
  188. // num+=num;
  189. // alert(num);//200
  190. // alert(arguments[0]);//200
  191. // };
  192. // fn(100);
  193. // var num=0;
  194. // //匿名函数
  195. // (
  196. // function (num) {
  197. // num++;
  198. // if (num<=5)
  199. // {
  200. // alert(num);
  201. // //递归调用
  202. // arguments.callee(num);
  203. // }
  204. // }
  205. // )(num);
  206. //严格模式
  207. // "use strict"
  208. // var obj=function () {
  209. // arguments=100;
  210. // };
  211. // obj();//报错
  212. // var fn=function (num) {
  213. // num+=num;
  214. // alert(num);//200
  215. // alert(arguments[0]);//100
  216. // };
  217. // fn(100);
  218. // var num=0;
  219. // //匿名函数
  220. // (
  221. // function (num) {
  222. // num++;
  223. // if (num<=5)
  224. // {
  225. // alert(num);
  226. // //递归调用
  227. // arguments.callee(num);//报错
  228. // }
  229. // }
  230. // )(num);
  231. /**
  232. * 13、函数必须声明在顶层,将来js将引入块级作用域(不允许在非函数代码块中声明函数)
  233. * 1、arguments不能被赋值
  234. */
  235. //普通模式
  236. // var i=1;
  237. // if (i>0){
  238. // function fn() {
  239. // console.log("非严格模式可以在此");
  240. // }
  241. // (function () {
  242. // console.log("匿名,非严格模式可以在此")
  243. // })()
  244. //
  245. // }
  246. // fn();
  247. //严格模式
  248. // "use strict"
  249. // var i=1;
  250. // if (i>0){
  251. function fn() {
  252. console.log("严格模式 不可以在此");//fn is not a function
  253. }
  254. // (function () {
  255. // console.log("匿名,严格也模式可以在此")
  256. // })()
  257. // }
  258. // //fn();
  259. /**
  260. * 14、严格模式下,一些新增了一些保留关键字,implements,interface,let,package,private,protected,public,static,yield
  261. * 不准许使用
  262. */
  263. </script>
  264. </head>
  265. <body>
  266. </body>
  267. </html>

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值