`
jindw
  • 浏览: 508461 次
  • 性别: Icon_minigender_1
  • 来自: 初到北京
社区版块
存档分类
最新评论

JS几处怪癖的语义

阅读更多
带ID的函数表达式:

var fn = function fnid(){};


按照ECMA262定义,上面这段脚本等价于:

with({fnid:null}){
  var fn = fnid = function(){};
}

注意:fnid在with外是不可见的,但是IE没有严格遵守ECMA规范(同样的情况发生在catch语法上)。在IE上相当于:
  var fnid = function(){};
  var fn = fnid;


在刚刚发布的JSA1beta上,还不能处理这个问题(新版本将这周内发布)。同时,鉴于这种语法在不同浏览器上表现不同,还是建议尽量避免使用(这点上,我个人还是更喜欢ie的方式)。


var语句:
太常用了,但是,没有注意还是很容易出问题。
var 用来声明全局或函数变量,但是,只是申明,重复申明也不能置空,范围是函数或者全局空间,位置在函数或脚本顶端,与块无关,这些与常用高级语言区别很大。

怪癖的代码
var vaiable =0;
function test(){
   variable =1;//别担心,不会改动全局变量vaiable
   //do ........
   var vaiable;//变量申明无顺序(一律置顶),只是赋值有顺序。
}




常见错误有:
var flag;//这里可能有人(包括我自己)喜欢自做聪明的利用一下变量的初始值undefined
while(!flag){//没准那个角落里面已经给当前函数内同名变量给赋值了就惨了
  //.....
}




分享到:
评论
2 楼 hax 2007-07-01  
btw,var的最大问题是他的作用域是函数,而不是block。例如下面的:

alert(x);
if (a = 1) {
  var x = 1;
} else {
  var x = 2;
}
alert(x);

js2引入了let,来替代var。
1 楼 hax 2007-07-01  
第一个问题是ie的bug!因为fnid的主要目的是为了函数内部递归调用之用,省得你写arguments.callee那么长。。。

至于说你更喜欢ie的做法,也许jscript团队的想法跟你一致。但是这不是它违背ecma规范的理由,否则他们就不能声称自己是ecma的实现。类似的问题还有{}和[]初始化的问题: var x = [1,2,3,]长度应该是3,但是jscript是4。var obj={a:1,b:2,c:3,}按照规范是合法的,jscrript会报语法错。

我建议jsa的最佳做法是:如果开启一个所谓的jscript兼容选项,就把function expression的fnid去掉,其内部的fnid替换成arguments.callee。

你最后一个代码段会发生问题的情况只是在这段语句之前已经有地方写了 flag = xxx了。这种情况确实少见,建议jsa给出warning!

相关推荐

    language-javascript-semantic, 面向 Atom的JavaScript语义高亮.zip

    在"language-javascript-semantic-master"这个压缩包中,通常包含以下几部分: 1. **源代码**:实现语义高亮功能的JavaScript和CSS文件,这些文件定义了如何解析JavaScript代码并应用相应的高亮样式。 2. **配置...

    语义化标签兼容IE8以上文件

    2. **定义元素**:对于不被IE8识别的语义化标签,`myIE8up.js`可能会创建这些标签作为JavaScript对象,并赋予它们相应的CSS类名,以便通过CSS进行样式设置。 3. **DOM操作**:文件可能包含将这些语义化标签插入到DOM...

    tern-lint, 用于验证javascript文件收集语义错误的Tern插件.zip

    tern-lint, 用于验证javascript文件收集语义错误的Tern插件 lint 这款软件可以验证javascript文件,收集语义错误。 它是 static 类型检查器像流 。 main linters JSHint like JSCS ESLint 的主要区别是,验证...

    vscode中的语法高亮和语义高亮(Syntax Highlight and Semantic Highlight)

    - **修改 Syntax Highlight 配置颜色**:通过设置不同 token 类型的 scope(如 `keyword.operator.arithmetic.js`),可以精确控制每个语法元素的颜色。例如,可以更改 JavaScript 中加号的显示颜色。 2. **语义...

    语义网:用于使用语义网技术构建应用程序的一组JavaScript库和实用程序

    在这个领域,JavaScript库和实用程序扮演着关键角色,它们为开发人员提供工具来创建能够理解、推理和操作语义数据的应用程序。在给定的标题和描述中,我们可以看到一个专门针对这一目的的JavaScript项目,它是一个用...

    JavaScript js基础学习 示例代码

    JavaScript js基础学习 示例代码JavaScript js基础学习 示例代码JavaScript js基础学习 示例代码JavaScript js基础学习 示例代码JavaScript js基础学习 示例代码JavaScript js基础学习 示例代码JavaScript js基础...

    两个比较好用的Eclipse中javascript插件jsEditor jsEclipse

    总的来说,jsEditor和jsEclipse都是Eclipse中不可或缺的JavaScript开发工具,它们通过丰富的特性和服务,帮助开发者提高生产力,降低出错概率,使JavaScript编程更加轻松愉快。无论你是新手还是经验丰富的开发者,都...

    基于elinput打造的语义化版本输入框

    以下几点是`el-semver-input`的主要特点: 1. **格式校验**:组件内部实现了对输入值的实时校验,确保输入的版本号符合`主版本号.次版本号.修订号`的结构,每个部分只能包含非负整数。 2. **错误修正**:如果用户...

    js酒店价格日历_js门票价格日历_javascript价格日历

    此程序是javascript和php开发,提供酒店、门票订购的价格日历和点击日历订购产品功能。详细请参考驴妈妈 酒店和门票的价格日历。 ...style 样式和js文件 说明: 此程序中js是驴妈妈上的,我做了些修改...不足之处请反馈。

    js2c#-js转换c#代码

    JavaScript(简称JS)是一种广泛用于前端开发的轻量级脚本语言,而C#则是一种面向对象的编程语言,常用于构建Windows桌面应用、游戏、服务端应用等。"js2c#"工具正是一个旨在帮助开发者将JavaScript代码转换为C#代码...

    LUA-JS.zip_js lua.js_js调用 lua_lua JavaScript_lua调用js_lua转js

    JS和LUA交互,主要是JS和LUA交互实现模版,可以作为参考

    JavaScript应用实例-adb5037常用命令.js

    JavaScript应用实例-adb5037常用命令.js

    netscape.javascript.JSObject

    applet 调用js 所需包 JSObject.getWindow(this).eval("javascript:alert(111)");

    JS和HTML和JAVAScript写简单的翻牌游戏小游戏 .html

    JS和HTML和JAVAScript写简单的翻牌游戏小游戏 .htmlJS和HTML和JAVAScript写简单的翻牌游戏小游戏 .htmlJS和HTML和JAVAScript写简单的翻牌游戏小游戏 .htmlJS和HTML和JAVAScript写简单的翻牌游戏小游戏 .htmlJS和HTML...

    JavaScript解释器js.js.zip

    js.js 是一个用 JavaScript 编写的 JavaScript 解释器 Instead of trying to create an interpreter from scratch, SpiderMonkey is compiled into LLVM and then emscripten translates the output into ...

    json3.js 【JS / JavaScript 中解析JSON的js包,JSON官方的JSON解析包】

    json3.js 【JS / JavaScript 中解析JSON的js包,JSON官方的JSON解析包】。JavaScript中解析JSON的js包,页面中引入json3.js,即可使用。 使用方法:JSON.parse(str), JSON.stringify(obj) 更多详情请参考博文: ...

    这是个js编辑工具这是个js编辑工具这是个js编辑工具

    JavaScript编辑工具是程序员日常开发工作中不可或缺的利器,尤其对于JavaScript开发者而言,一款高效、智能的编辑工具能够极大地提升编程效率和代码质量。本篇将详细探讨JavaScript编辑工具的关键功能及其在编程过程...

    js游戏 空当接龙

    JavaScript在游戏中的应用主要包括以下几个方面: 1. **用户界面**:JavaScript可以创建动态的HTML元素,如牌堆、回收站和基础牌区,通过DOM操作改变页面布局和内容。同时,它还可以实现动画效果,如牌的翻转、移动...

    jsFormatter.js + htmlFormatter.js +

    1. **jsFormatter.js**: 这个文件通常是一个JavaScript代码格式化器,它的作用是将混乱的JavaScript代码整理成具有良好可读性的格式。它可能包含了缩进、换行、注释排序等功能,有助于开发者提高代码审查效率,保持...

Global site tag (gtag.js) - Google Analytics