【前端笔试题一(待续)】

   最近各大公司的实习招聘开始了,上学期的实习辞职到如今也快一个月了。这一月彷佛没干什么似得,毕设开题也没弄,被老板抓着作实验,各类闹心的事。这月从新在看《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
相关文章
相关标签/搜索