1.Function Argumentsexpress
JavaScript 函數的參數函數
類型能夠是 複雜類型如 Object or Array 和簡單類型 String Integer null undefined;當參數是 複雜類型的時候,將會把 複雜類型的 引用傳出 函數體內,也就是傳入函數內的不是 複雜類型的副本,而是其在內存中的指針。當參數是 簡單類型的時候,就會直接傳值進入函數體內。look the below demostrated:spa
var obj={name:'joe'};指針
(function changeName(obj){blog
obj.name='new joe';ip
})(obj);內存
console.log(obj.name); //new joe作用域
var num=2;get
(function(num){it
num=3;
})(num);
console.log(num); //2
JavaScript 函數類型
函數聲明和函數表達式
函數聲明以下:
function fname(){
}
函數表達式以下:
var fname=function(){
}
函數聲明能夠在 解釋器 解析以前調用, 函數表達式從另外一個角度來看是賦值表達式的子集。 賦值完,才能夠調用;for example:
declaration(); //declaration
function declaration() {
console.log('declaration');
}expression(); // function undefined
var expression = function() {
console.log('expression');
}運行 expression 函數爲 拋出異常,可是 declaration函數運行正常。這就是區別。
由於 JavaScript在程序執行以前,聲明函數已經被解析了,因此在函數定義以前能夠去 調用它。
而函數表達式 則是在 函數未賦值給變量以前,是不能調用的。因此,好的代碼格式是 把 變量聲明在
前面,下面看一個例子:
var expression;console.log(typeof expression);//undefined
console.log(typeof declarations); // function
if(true) {function declarations() {
console.log('dec');
}expression = function() {
console.log('exp')
}
}declarations(); //dec
expression(); //exp
function scope
JavaScript 是一函數來區分做用域的。
var num=20;
(function (){
console.log(num) //30
num=30;
})();
console.log(num); //20
原文地址:http://markdaggett.com/blog/2013/02/15/functions-explained/