【前端筆試題一(待續)】

   最近各大公司的實習招聘開始了,上學期的實習辭職到如今也快一個月了。這一月彷佛沒幹什麼似得,畢設開題也沒弄,被老闆抓着作實驗,各類鬧心的事。這月從新在看《JavaScript高級程序設計》,實習半年多都在作PHP,各類雜活,前端的知識原本就很差,更是忘了一大堆。筆試阿里的實習的時候,徹底傻眼了。。。仍是好好看看基礎知識吧。最近有關注各個實習的筆試題,都是看完了而後就忘了,想一想仍是記錄下來吧。爲即未來臨的找工做作作準備。javascript

 

1、(function(){})();和(function(){}())每一個括號的用途和區別。

      首先第一種形式是咱們比較常見的,在閉包中咱們會常常用的。稱之爲自執行匿名函數,也就是說咱們建立了一個匿名函數,而後當即調用了它。前端

      先來看一個函數定義和函數表達式的區別:java

    函數定義:function FunctionName([.....]){FunctionBody}閉包

    函數表達式:function [FunctionName]([....]){FunctionBody}函數

  能夠看到這兩個形式很是的像,區別就是函數表達式能夠省略函數名。在JS中,若是一條語句是以function 開始,那麼就會被解釋爲函數定義,函數定義是不能緊跟着()被執行的。應該以下:this

  var someFunction = function(){};  //定義函數設計

  someFunction();  //調用函數blog

  那麼咱們的匿名函數要怎樣定義後當即調用執行呢。這就是咱們見的第一種形式,在前面加個(function(){}),這裏就會將函數定義轉換成函數表達式,函數表達式就能夠後面跟着圓括號當即執行了。ip

  好了,知道它的意思了,咱們就能夠很簡單的知道各個括號的用途了。作用域

  function();這個括號是函數的參數列表。

  (function(){});這個括號就是咱們說的將一個函數定義轉換爲函數表達式。

  (function(){})();這個括號就是當即執行這個函數。由於JS沒有塊級做用域的概念,因此這個函數常常用來模仿塊級做用域。函數體內的變量在函數執行完以後會立馬被銷燬掉。看個例子:  

function test(){
	for(var i = 0; i < 10; ++i){

	}
	alert(i);//10
}

  

function test(){
	(function(){
		for(var i = 0; i < 10; ++i){

		}
	})();
	alert(i);//Error:i is not defined!
}

  第二種寫法其實和第一種寫法最終效果是同樣的,也是自執行匿名函數。這種是模塊模式的寫法。

2、How would you mark this work? add(2,5);//7  add(2)(5);//7

function add(a, b){
	var temp = function(b){
		return a + b;
	};

	if(typeof b == "undefined"){
		return temp;
	} else {
		return temp(b);
	}
}
console.log(add(2,5)); //7
console.log(add(2)(5));  //7
相關文章
相關標籤/搜索