摘要: 题目1if (!("a" in window)) { var a = 1;}alert(a); // undefined, ~~~所有全局变量都是window的属性,声明语句会被提升至作用域顶部代码含义:如果window不包含属性a,就声明一个变量a,然后赋值为1。你可能认为alert出来的结果是1,然后实际结果是“undefined”。要了解为什么,需要知道JavaScript里的3个概念。首先,所有的全局变量都是window的属性,语句 var a = 1;等价于window.a = 1; 你可以用如下方式来检测全局变量是否声明:"变量名称" in 阅读全文
posted @ 2013-09-21 18:26 stephenykk 阅读(226) 评论(0) 推荐(0) 编辑
摘要: ~~在看到这篇文章之前如果让我来判断IE的版本,那么我基本上会用 navigator.userAgent去做字符串检索,现在觉得特性检测的确比较靠谱一点今天一个项目中需要判断IE版本号,又因为 jQuery 2.0 去除了对浏览器版本号的判断(它推荐特性检测),于是就看到一老外写的一段代码:var _IE = (function(){ // 因为前面有括号 funcition被认为是匿名函数对象 var v = 3, div = document.createElement('div'), all = div.getElementsByTagName('i'); 阅读全文
posted @ 2013-09-21 17:52 stephenykk 阅读(419) 评论(0) 推荐(0) 编辑
摘要: 昨晚,朋友拿了一道题问我:a.onclick = function(){ setTimeout(function() { //do something ... },0);}; //~~~ 我只知道这样回调会在JS引擎空闲时被执行,由于是单线程的关系,会进入待执行队列,没想到有人能解释的那么详细,差距啊~JavaScript API 文档明确定义:setTimeout的第二个参数意义为隔多少毫秒后,回调方法就会被执行。那么可以推断出:这里设成0毫秒,就立即被执行了。—————— 既然立即执行,为什么这段代码的作者为什么要 舍近求远?难道作者写代码的时候喝醉了?显然不是... 阅读全文
posted @ 2013-09-21 17:27 stephenykk 阅读(299) 评论(0) 推荐(0) 编辑