被人问起一个问题:
复制代码 代码如下:
这三个标签的使用有什么区别?
虽然一直在用,却也没有好好去弄清楚,这里详细说明一下。
查阅一些资料,主要是浏览器支持问题。type 和 language 属性都可用来指定
您可能偶尔会看见 language 的值为 vbscript(对 type 而言是 text/vbscript),表示包含的脚本代码是用 microsoft 的 visual basic script 编写的。
利用 javascript,您还可以使用 language 的值 javascript 1.1,表示包含的脚本语句只能被 netscape 3.0 或更新的版本处理。netscape 2.0 只支持 javascript 1.0,而无法处理标记为 javascript 1.1 的脚本。
为了保证脚本程序可以正常执行,除非特意使用仅 ie 支持的 vbscript 和 script encoder 机制外,应当将 script 标记的 type 属性设置为 javascript,并且不要设置已经废弃的 languange 属性。
各浏览器对于 type 和 language 属性本身均支持,但是对于其中设置的脚本语言类型识别与支持各异:
type 和 language 同时存在时,所有浏览器均优先识别 type 属性内的脚本类型;
其中 ie 浏览器实际支持 jscript 和 vbscript 脚本语言标示以及 script encoder 加密;
firefox chrome safari opera 对 type 属性值的具体识别宽容度不一致,相对 chrome safari 对属性值正确性校验更加宽松,firefox 的校验最为严格;
在 language 属性值识别宽容度比较中,各浏览器中 chrome safari 依然最为宽松,ie 最为严格,firefox 与 opera 持平;
language encode 比较中,只有 ie 支持 jscript.encoder 以及 vbscript.encoder 类型设置,firefox chrome safari均不支持,opera 中则是该属性值被修复为默认的 javascript 脚本语言后才有输出值。
复制代码 代码如下:
关于变量有一个问题,即使你在函数内如同上面那样声明变量,它就会变成全局变量。
如果用 var 声明就会有一个问题。
复制代码 代码如下:
结果依然会弹出a。
为了保证脚本程序可以正常执行,除非特意使用仅 ie 支持的 vbscript 和 script encoder 机制外,应当将 script 标记的 type 属性设置为 javascript,并且不要设置已经废弃的 languange 属性。