JavaScript 中的陷阱
来源:互联网 发布:print在vb中什么意思 编辑:程序博客网 时间:2024/05/18 14:24
全局变量
functionfoo(){ vara=b=0; // body...}
functionfoo(){ vara=(b=0); // body...}
变量声明
myName="global"; functionfoo(){ alert(myName); varmyName="local"; alert(myName);} foo();
functionfoo(){ varmyName; alert(myName);// "undefined" myName="local"; alert(myName);// "local"}
if(!("a"inwindow)){ vara=1;} alert(a);
a
变量的声明被提前到了代码顶端,此时还未赋值。接下来进入 if
语句,判断条件中 "a" in window
已成立(a
已被声明为全局变量),所以判断语句计算结果为 false
,直接就跳出 if
语句了,所以 a
的值为 undefined
。vara;// "undefined"console.log("a"inwindow);// true if(!("a"inwindow)){ vara=1;// 不执行} alert(a);// "undefined"
函数声明
alert(typeoffoo);// "function" functionfoo(){ // body...}
alert(typeoffoo);// "undefined" varfoo=function(){ // body...};
functiontest(){ alert("1");} test(); functiontest(){ alert("2");} test();
函数表达式
varbar=functionfoo(){ // body...};
varbar=functionfoo(){ foo();// 正常运行}; foo();// 出错:ReferenceError
函数的自执行
// (1) 这只是一个分组操作符,不是函数调用!// 所以这里函数未被执行,依旧是个声明functionfoo(x){ alert(x);}(1);
// 标准的匿名函数表达式varbar=functionfoo(x){ alert(x);}(1); // 前面的 () 将 function 声明转化为了表达式(functionfoo(x){ alert(x);})(1); // 整个 () 内为表达式(functionfoo(x){ alert(x);}(1)); // new 表达式newfunctionfoo(x){ alert(x);}(1); // &&, ||, !, +, -, ~ 等操作符(还有逗号),在函数表达式和函数声明上消除歧义// 所以一旦解析器知道其中一个已经是表达式了,其它的也都默认为表达式了true&&functionfoo(x){ alert(x);}(1);
解决:这个陷阱的关键在于,弄清楚形形色色函数表达式的实质。
循环中的闭包
varlinks=document.getElementsByTagName("ul")[0].getElementsByTagName("a"); for(vari=0,l=links.length;i<l;i++){ links[i].onclick=function(e){ e.preventDefault(); alert("You click link #"+i); } }
varlinks=document.getElementsByTagName("ul")[0].getElementsByTagName("a"); for(vari=0,l=links.length;i<l;i++){ links[i].onclick=(function(index){ returnfunction(e){ e.preventDefault(); alert("You click link #"+index); } })(i);}
for(vari=0,l=links.length;i<l;i++){ (function(index){ links[i].onclick=function(e){ e.preventDefault(); alert("You click link #"+index); } })(i);}
- 注意! JavaScript中的"陷阱"
- JavaScript中的"陷阱"
- 注意! JavaScript中的"陷阱"
- JavaScript 中的陷阱
- JavaScript 中的陷阱
- JavaScript 中的陷阱
- JavaScript 中的陷阱
- Javascript中的陷阱大集合
- Javascript中的陷阱大集合
- JavaScript中的陷阱大集合
- Javascript中的陷阱大集合
- Javascript中的陷阱大集合
- JavaScript中的运算操作陷阱
- Javascript中的陷阱大集合
- 介绍JavaScript中的四个陷阱
- Javascript中的陷阱大集合【译】javascript
- Javascript中的陷阱大集合【译】
- Javascript中的陷阱大集合【译】
- java类型自动转换
- 【重温】_Struts2重温笔记,要点概述_OGNL表达式【二】
- 指针和数组相同吗?
- C++中malloc/free和new/delete 的使用
- Surrounded Regions
- JavaScript 中的陷阱
- android: sliding_menu切换不同的activity【】
- hive join
- 设计模式学习笔记-迭代器模式 一般
- Jquery判断$("#id")获取的对象是否存在的方法
- 系统性学习linux文件系统
- Hudson插件管理及作用
- va_start(),va_end()函数应用
- ListView