js练习题
1.
var i = 0,j = 0; for(;i<6,j<10;i++,j++){ k = i + j; }; console.log(k); //18,逗号运算符只看最后一个运算
2.
fn1(); var fn1 = function(a){ alert(a); } //fn1 is not a function //变量域解析,fn1域解析一开始是为var fn1;但是并不知道他是什么类型, //所以fn1()是不符合的
3.
var x = 1; function fn(n){n = n+1}; y = fn(x); console.log(y); //undefined ,函数没有返回值
4.
function fn1() { var a = 0; function fn2() { ++a; alert(a); } return fn2; } fn1()(); //1 var newFn = fn1(); newFn();//1 newFn();//2 //每次运行newFn,虽然fn2函数被垃圾回收了,但是他的父元素fn1并没有垃圾回收,所以a会加1变成2
5.
for(var i = 0; i < 5; i++) { setTimeout(function(i) { return function() { console.log(i); }; }(i), i * 1000); //0,1,2,3,4 //运用了函数立即执行,所以并不会像定时器那有延迟执行
6.
console.log( (!+[]+[]+!+[]).length ); //'truetrue'.length; 8; //这里的+是正运算符 // [] => '' => 0 先调用toString然后再调用toNumber //就会变成 true + [] + true; => true + '' + true
7.
100['toString']['length'] 的结果是(1); //'100'.toString(); toString默认会有一个10参数,10进制 //这里length方法是算的函数参数长度
8.
var arr = [1,2]; var arr2 = arr.concat(); //arr2 => [1,2]; 并不影响arr arr2.push( arr.splice(1,0) ); //[1,2,[]]; //splice返回 包含被删除项目的新数组 这里没有删除一个,所以为[]