JavaScript 中函数定义的差异问题
[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是不存在的.
虽然这种写法解决了 不符合"先定义后调用" 的问题,但这样的写法不够直观.
摘自 简生的代码备忘录
相关新闻>>
- Javascript 兼容 IE6、IE7、FF 的“加入收藏”“设为首页”
- 好好学一遍JavaScript 笔记(一)——基础中的基础
- 好好学一遍JavaScript 笔记(二)——encode、数组、对象创建
- 好好学一遍JavaScript 笔记(三)——StringBuffer、prototype
- 好好学一遍javaScript 笔记(四)——Attribute、HTML元素、文档碎
- 好好学一遍JavaScript 笔记(五)——正则表达式基础
- 好好学一遍JavaScript 笔记(六)——正则表达式基础二
- 好好学一遍JavaScript 笔记(七)——RegExp对象与常用正则
- 好好学一遍JavaScript 笔记(八)——冒泡型事件、捕获型事件
- JavaScript详解
- 发表评论
-
- 最新评论 更多>>