Javascript教程:关于深入了解JS的几个问题
看了Dmitry Baranovskiy写的这篇So, you think you know JavaScript?,也拜读了Nicholas C. Zakas的答复,对Javascript的了解又进了一步,尝试把自己的理解记录如下 DaimaRen.cn © 2009-2010 by Tomie Zhang
if (!("a" in window)) { var a = 1; } alert(a); 这一题是对JS变量的考察,这个测试翻译成自然语言大意是:如果window里不存在a这个属性,那么就定义个a的变量并给它赋值等于1。 这里本来期望的值是1,但是很可惜它会弹出”undefined”,这是为什么呢?首先javascript的全局变量都是window的属性(properties),你可以用形如: DaimaRen.cn © 2009-2010 by Tomie Zhang
alert("Daimaren.cn" in winodw) 来查看,var a = 1 等同于 window.a = 1,其次javascript引擎在扫描代码时是将变量提前到scope之前运行,如: DaimaRen.cn © 2009-2010 by Tomie Zhang
alert("a" in window); var a; 其实在解析之后是 DaimaRen.cn © 2009-2010 by Tomie Zhang
var a; alert("a" in window); 所以它的结果是true,最后javascript的声明与初始化是分开的, DaimaRen.cn © 2009-2010 by Tomie Zhang
var a = 1; /*其实在运行时将变为*/ var a; a=1; javascript会自动将这两个步骤分拆,Nicholas的解释是这种分拆可以让声明前置在scope上方,而为什么要这么做,是因为声明时就初始化变量,可能影响代码运行时变量的值,导致意外的结果。 DaimaRen.cn © 2009-2010 by Tomie Zhang
var a;//自动前置运行的变量,没有初始化 if (!("a" in window)) {//FLASE var a = 1; } alert(a);//弹出undefined 第二题: DaimaRen.cn © 2009-2010 by Tomie Zhang
var a = 1, b = function a(x) { x && a(--x); }; alert(a); 如果理解上第一题,那这个题就很好解决了,这是关于function的,它有2种,一种是函数声明(function declaration),一种是函数表达式(function expression),形如: DaimaRen.cn © 2009-2010 by Tomie Zhang
function Daimaren(){//这是一个函数声明 do anything you want here........ } var Daimaren = function(){//这是一个函数表达式 do anything you want here........ } 所有的函数声明在运行时是会被前 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |