前端进阶计划第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
</>