深刻理解 JavaScript Function

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/

相關文章
相關標籤/搜索