1.alert分别输出什么值?

A.3,4   B.4,4    C.4,5    D.undefiend undefined

var a = 2;
var func = (function () {
  var a = 3;
  return function () {
    a++;
    alert(a);
  }
}) ();
func();
func();

解析:考察函数表达式,立即执行函数,闭包,作用域,引用类型等。具体相关知识点就不扩展说了,我觉得既然答案给了D选项这里还应该再考个变量提升多好~正确答案选C。
前两句是赋值语句,全局变量a=2,经立即执行的匿名函数表达式执行后初始化了括号里面那个函数的活动对象AO和作用域链同时确定了this对象,增加了内部变量a=3,返回了一个函数引用。全局变量func指向返回的这个函数的引用(这就是闭包)。第一次执行func(),func指向的内存堆中某个函数对象,经过执行a++,在本函数的作用域中的AO中寻找a变量未果沿着作用域链查找外层作用域的AO,找到a=3,执行a++后a=4,alert(4)。再执行func(),还是执行的是内存堆中的那个函数对象,又一次初始化内存堆中的这个函数的作用域链和AO等,寻找a未果沿着作用域链找外层AO找到a=4,执行a++后a=5,alert(5),完毕!


2.js中的迭代:

every()、some();

filter()、map()、forEach();


3.this.skill = param && param.skill || '密保';什么意思?

答:如果存在param这个参数,并且param拥有skill属性,就用这个属性赋值给this的skill属性,否则将用默认值“密保”来设置。


a() && b() :如果执行a()后返回true,则执行b()并返回b的值;如果执行a()后返回false,则整个表达式返回a()的值,b()不执行;
a() || b() :如果执行a()后返回true,则整个表达式返回a()的值,b()不执行;如果执行a()后返回false,则执行b()并返回b()的值;
&& 优先级高于 ||

alert((1 && 3 || 0) && 4); //结果4 ①
alert(1 && 3 || 0 && 4); //结果3 ②
alert(0 && 3 || 1 && 4); //结果4 ③

比如:

$("#nr").find(".mask-trigger").length || b.hasClass("comp-resize") || b.parents("li.comp-resize").length || b.hasClass("ui-draggable") || b.parents(".ui-draggable").length || b.parents("#containment").length || b.parents(".create_left").length || ($("body").css({
				"user-select": "none",
				cursor: "default"
			}), i.selectStart(a.clientX, a.clientY))