strict模式

    JavaScript在设计之初,为了方便初学者学习,并不强制要求用 var 申明变量。这个设计错误带来了严重的后果:如果一个变量没有通过 var 申明就被使用,那么该变量就自动被申明为全局变量:

    i = 10; // i现在是全局变量

    在同一个页面的不同的JavaScript文件中,如果都不用 var 申明,恰好都使用了变量 i ,将造成变量 i 互相影响,产生难以调试的错误结果。

    使用 var 申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内(函数的概念将稍后讲解),同名变量在不同的函数体内互不冲突。

    为了修补JavaScript这一严重设计缺陷,ECMA在后续规范中推出了strict模式,在strict模式下运行的JavaScript代码,强制通过 var 申明变量,未使用 var 申明变量就使用的,将导致运行错误。

    启用strict模式的方法是在JavaScript代码的第一行写上:

    'use strict';

    这是一个字符串,不支持strict模式的浏览器会把它当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式运行JavaScript。

    来测试一下你的浏览器是否能支持strict模式:

    'use strict';

    // 如果浏览器支持strict模式,

    // 下面的代码将报ReferenceError错误:



    abc = 'Hello, world';

    alert(abc);

    运行代码,如果浏览器报错,请修复后再运行。如果浏览器不报错,说明你的浏览器太古老了,需要尽快升级。

    不用 var 申明的变量会被视为全局变量,为了避免这一缺陷,所有的JavaScript代码都应该使用strict模式。我们在后面编写的JavaScript代码将全部采用strict模式。