•比較三種方式定義的區別:
function語句 |
Function構造函數 |
函數直接量 |
|
兼容 |
完全 |
js1.1以上 |
js1.2以上版本 |
形式 |
句子 |
表達式 |
表達式 |
名稱 |
有名 |
匿名 |
匿名 |
性質 |
靜態 |
動態 |
靜態 |
解析時機 |
優先解析 |
順序解析 |
順序解析 |
作用域 |
具有函數的作用域 |
頂級函數(頂級作用域) |
具有函數作用域 |
/*----------------------函數效率對比--------------------*/
var date = new Date();
var d1 = date.getTime();
for(var i=0; i<100000; i++){
function test(){;}; //function語句形式效率更高
//var test2 = new Function();
}
var date2 = new Date();
var d2 = date2.getTime();
alert(date2 - date);
/*--------------------函數解析順序----------------------*/
//function語句形式:優先解析,先解析function函數
test();
function test(){
console.log('語句形式,優先解析');
}
//函數直接量形式:順序解析,先解析test2方法在解析函數
test2();
var test2 = function(){
console.log('直接量形式,順序解析');
}
/*----------------------函數解析順序--------------------*/
//第一個函數,返回4,說明第一個函數被第四個函數覆蓋
function f(){
return 1;
}
console.log(f());
//第二個函數,返回2,說明第四個函數被第二個函數覆蓋
var f = new Function("return 2")
console.log(f());
//第三個函數,返回3,說明第二個函數被第三個函數覆蓋
var f = function(){
return 3;
}
console.log(f());
//第四個函數,返回3,說明第四個函數被第三個函數覆蓋
function f(){
return 4;
}
console.log(f());
//第五個函數,返回5,說明第三個函數被第五個函數覆蓋
var f = new Function("return 5")
console.log(f());
//第六個函數,返回6,說明第五個函數被第六個覆蓋
var f = function(){
return 6;
}
console.log(f());
/*---------------------函數作用域的概念---------------------*/
var k = 1;
function t1(){
var k = 2;
//返回2
function test(){
return k;
}
//返回2
var test = function(){
return k;
}
//返回1
var test = new Function('return k');
console.log(test());
}
console.log(t1());