JavaScript 中函数定义的差异问题

来源:未知 责任编辑:责任编辑 发表时间:2014-01-25 11:35 点击:

[javascript]
try { 
    fun1(); 
} catch(e) { 
    alert(e); 
}; 
 
try { 
    fun2(); 
} catch(e) { 
    alert(e); 
}; 
 
function fun1() { 
    alert("this is fun1."); 

 
var fun2 = function() { 
    alert("this is fun2."); 

 
try { 
    fun2(); 
} catch(e) { 
    alert(e); 
}; 
try {
 fun1();
} catch(e) {
 alert(e);
};

try {
 fun2();
} catch(e) {
 alert(e);
};

function fun1() {
 alert("this is fun1.");
}

var fun2 = function() {
 alert("this is fun2.");
}

try {
 fun2();
} catch(e) {
 alert(e);
};
因为这样的写法更有助于区别函数的定义和一般变量的定义.

 


但这样的写法,

[javascript]
function fun1() { 
    alert("this is fun1."); 

function fun1() {
 alert("this is fun1.");
}


当这个function的语句在解析时会发生被提升的情况.( 加粗部分出自<JavaScript语言精粹>)

这就是意味着,用此方法无论在哪里定义的函数,都会被移动到定义时所在作用域的顶层.

也就是说,在定义的作用域内都可以调用该函数,这就不符合"先定义后调用"的理念.

这样会影响代码可读性和带来一些混乱,所以在编码时更应该注意"先定义后调用".

 


而下面的代码,则解决了上面所提及的问题.

[javascript]
var fun2 = function() { 
    alert("this is fun2."); 

var fun2 = function() {
 alert("this is fun2.");
}


函数fun2的调用必须在函数的定义之后,不然会抛出错误.

因为这种写法类似于定义一个变量,在定义fun2之前,fun2是不存在的.

虽然这种写法解决了 不符合"先定义后调用" 的问题,但这样的写法不够直观.

摘自 简生的代码备忘录
 

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Gb2312转utf-8编码的方法(vbs+js)
    • 如何使用Ajax技术开发Web应用程序(1)
    • js跳转路径问题
    • JavaScript模仿桌面窗口
    • 用js检测两个线段是否相交
    • 运用JavaScript构建你的第一个Metro式应用程序(on Windows
    • 我知道的JavaScript -- 设计模式(桥接)应用之 – 验证器
    • 我是如何去了解jquery的(六),案例之幻灯片轮换
    • Jquery封装幻灯片效果
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1