前端进阶计划第42周作业
2015年第42周——基本语法
变量提升
var a = 1;
var o = {};
(function(o1){
    var b = a = c = 2;
    o1.a = 3;
    
    alert(typeof a !== 'undefined' ? a : 'undefined');
    alert(typeof b !== 'undefined' ? b : 'undefined');
    alert(typeof c !== 'undefined' ? c : 'undefined');
    alert(o1.a);
    alert(o.a);
    alert(o === o1);
    function b(){};
}(o));
alert(typeof a !== 'undefined' ? a : 'undefined');
alert(typeof b !== 'undefined' ? b : 'undefined');
alert(typeof c !== 'undefined' ? c : 'undefined');
alert(o.a);
作用域
var a = 1;
var o1 = {
    a: 2,
    f1: function(){
        alert(typeof this.a === 'undefined' ? 'undefined' : this.a);
    }
};
var o2 = {
    a: 3,
    f2: function(){
        alert(typeof this.a === 'undefined' ? 'undefined' : this.a);
    
        return function(){
            alert(typeof this.a === 'undefined' ? 'undefined' : this.a);
        };
    }
};
o1.f1();
o2.f2();
o2.f2()();
数据类型
var a1 = [];
var a2 = [];
alert(a1 === a2);
var a3 = '123';
a3.s = 123;
a3.s += 1;
alert(a3.s);
数值
alert(123456789012345678901 > 123456789012345678900);
// 将“你好,javascript”转换成 unicode 字符集
对象
var o = {
    .1: "呵呵"
};
alert(o['0.1']);
alert(o['.1']);
运算符
1 + '2';
'1' + 2;
'a' + 1;
1 + 'a';
var a = 1;
var b = 2;
if(a = b){
    alert(1);
} else {
    alert(2);
}
var x1 = [] + [];
var x2 = [] + {};
var x3 = {} + {};
var x4 = {} + [];
函数
typeis
实现typeis方法,可以正确返回传入的数据类型。
typeis('1'); // => "string"
typeis(1); // => "number"
typeis({}); // => "object"
typeis([]); // => "array"
typeis.string('1'); // => true
typeis.number(1); // => true
typeis.object({}); // => true
typeis.array([]); // => true
each
实现each方法,可以正确遍历对象、数组,并且能够正确 break。
each([1, 2, 3], function(index, val){
    alet(val);
    if(val){
        return false;
    }
});
each({
    a: 1,
    b: 2,
    c: 3
}, function(key, val){
    alet(val);
    if(val){
        return false;
    }
});
柯里化
实现无限柯里化加法。
add(1)(2)(3)(); // => 6
add(1)(2)(3)(4)(); // => 10
add(1)(2)(3)(4)(5)(); // => 15
传参
实现以下功能,f函数可以根据参数的形参个数返回不同的结果。
f(function(a, b){
    alert(a + b); // => 1 + 2
});
f(function(a, b, c){
    alert(a + b + c); // => 3 + 4 + 5
});
参数
实现无限加法运算。
add(1, 2, 3); // => 6
add(1, 2, 3, 4); // => 10
add(1, 2, 3, 4, 5); // => 15
</>