`
jindw
  • 浏览: 512615 次
  • 性别: 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!

相关推荐

    前端面试_前端_

    - 结构语义化:理解如何使用语义化标签如`<header>`, `<nav>`, `<article>`, `<footer>`来提升网页可读性和可访问性。 - 表单元素:熟悉`<form>`, `<input>`, `<select>`, `<textarea>`等元素以及表单验证。 2. ...

    2020年web前端最全面试题及答案【含vue-react】.docx

    no quirks mode(无怪癖模式)或标准模式,严格遵循W3C标准,确保页面在所有现代浏览器中一致显示。 HTML、XHTML、XML有什么区别? HTML(HyperText Markup Language)是一种用于创建网页的标准标记语言,侧重于...

    百度-前端开发面试题目

    1. div、p、ul、ol、label 这几个标签是什么意思? * `div`:可定义文档中的分区或节 * `p`:定义一个段落 * `ul`:定义一个无序列表 * `ol`:定义一个有序列表 * `label`:定义一个 input 元素的标注 2. 你怎么...

    一个好的web开发人员需知道的10件事情.docx

    【描述】: 文档列举了成为优秀Web开发人员必备的10项关键技能,包括正则表达式、基本SEO、JavaScript库、跨浏览器调试等,这些技能对于前端和全栈开发都至关重要。 【标签】: Web开发, 正则表达式, SEO, JavaScript...

    毕业设计订餐系统源码-frequently-asked-front-end-interview-questions:纽约地区前端开发人员面试常

    怪癖模式 HTML : HTML5 特性 元标记的使用 HTML 与 XHTML 语义标记 CSS : 箱型 位置绝对/固定之间的差异 CSS 预处理器的优点 CSS3 中的新特性 显示多少属性 动画功能 div 与跨度 内联 vs 块 内部/外部样式表的优点 ...

Global site tag (gtag.js) - Google Analytics