闭包部分:
// function a(){
// function a(){
// var bbb = 34;
// console.log(aaa);
// }
// var aaa = 123;
// return b;
// }
// var glob = 100;
// var demo = a();
// demo();
// function test(){
// var arr = [];//arr里面填充了十个函数,
// for(var i = 0;i < 10;i++){
// arr[i] = function (){// console.log(i);
// document.write(i+" ");//此时会打印10个10,这是因为闭包的原因
// }
// }
// return arr;//数组返回出来。然后外部接收
// }
// var myArr = test();//myArr相当于arr,让myArr每一位都执行
// for(var j = 0;j < 10;j++){
// myArr[j]();
// }
// for(var i = 0;i < 10;i++){
// document.write(i);
// }
// document.write(i);
function test(){
var arr = [];//arr里面填充了十个函数,
for(var i = 0;i < 10;i++){
(function (j){
arr[j] = function (){
document.write(j + " ");
}
}(i));
}
return arr;//数组返回出来。然后外部接收
}
var myArr = test();//myArr相当于arr,让myArr每一位都执行
for(var j = 0;j < 10;j++){
myArr[j]();
}
for(var i = 0;i < 10;i++){
document.write(i);
}
document.write(i);
argumen和克隆部分:
//深度克隆
var obj = {
name:"abc",//原始值,栈内存->abc
age:123,
card:['visa','master'],
wife:{
name:'bcd',
son:{
name:"aaa"
}
}
}
var obj1 = {
} // // name:obj.name,
// age:123,
// card:[obj.card[0],obj.obj.card[1]],
// wife:{
// name:"bcd",
// son:{
// name:"bcd",
// son:
// }
// }
function deepClone(origin,target){
var target = target || {},
toStr = Object.prototype.toString,
arrStr = "[object Array]";
// 控制台:Object.prototype.toString.call([]);
for(var prop in origin){
if(origin.hasOwnProperty(prop)){
if(origin[prop] !=="null" && typeof(origin[prop]) == 'object'){
if(toStr.call(origin[prop]) == arrStr){
target[prop] = [];
}else{
target[prop] = {};
}
deepClone(origin[prop],target[prop]);
}else{
target[prop] = origin[prop];
}
}
}
return target;
// var arr = ['a','b','c'];
// for(var prop in arr){
// cconsole.log(arr[prop])
// }
// 数组:特殊对象//也可以for in 数组
//遍历对象 for(var prop in obj)
//判断是否为原始值(typeof() object ) 判断是数组还是对象( instanceof toString->推荐) 建立相应的数组或者对象(拷贝一个对象-》拷贝属性,原始值直接拷贝,不是的话,引用值(数组,对象),是数组,建立一个新的数组,然后把原来的数组和现在要被拷贝的新的数组当做一对拷贝对象)
// 完善一:没有传target,就return target
//完善二:
}
// 三目运算符
//简便操作 ? :
// 条件判断 ? 是:否 并且会返回值else if + return
// var num = 1 > 0 ? 2+2:1+1;
var num = 1 > 0 ? ("10" > "9" ? 1:0):2
// "10" > "9" :通过逐位比阿斯卡码,也就是1先比9,那么可知返回false
// 所以以下可以简写如下,加括号稳妥点,因为他会先执行
// if(toStr.call(origin[prop]) == arrStr){
// target[prop] = [];
// }else{
// target[prop] = {};
// }
target[prop] = toStr.call(origin[prop]) == arrStr? [] : {}
Dom操作:
原型链prototype:
作用域: