1 经典实例,涵盖全局变量,局部变量,变量声明提升,对象,上下文,闭包等知识
var num = 4;
var obj = {
num: 6,
fn:(function() {
this.num *= 2; //window.num*=2
num = num *2; //变量声明提升 NaN
var num = 4; //num = 4
return function() { //fn:function() {.... }
this.num *= 2;
num*=3;
alert(num);
}
})()
};
var fn = obj.fn; // window.num=8 num=NaN num=4 fn=function(){}
alert(num); //返回的是window.num=8;
fn(); // this-->window window.num=8*2=16 num=4*3=12 弹出num = 12
obj.fn(); //this--->obj obj.num=12 num=12*3=36
alert(window.num); //16
alert(obj.num); //12
2 new()
*调用函数的方式
1 圆括号直接调用
2 定时器调用
3 事件处理函数
4 对象打点调用
5 数组枚举调用
*new()实例:
function fn() {
console.log(this); // fn {}
this.name = "张小龙";
this.age = 30;
this.sex = "男";
}
var obj = new fn(); //new的作用,调用函数,返回一个名为fn的对象
console.log(obj); //fn {name: "张小龙", age: 30, sex: "男"}
new()内部执行机制:
1 在真正执行函数体之前,函数内部先默认创建一个局部变量,是一个fn{} 空对象
2 让函数内部this指向该空对象 this ===fn {}
3 执行函数体
4 函数体全部执行完毕,函数会返回该对象(返回函数上下文)
*构造函数
function Student(name,sex,age) {
this.name = name;
this.sex = sex;
this.age = age;
this.hobby = ["学习","运动","尊师爱友"];
this.study = function() {
alert("好好学习 天天向上");
}
}
//函数名首字母大写,以区别普通函数
var xiaoli = new Student("小丽","女",23);
var xiaohong = new Student("小红","女",18);
var xiaowei = new Student("小伟","男",24);
*构造函数操作DOM
//动态添加img便签
function CreatImg(tag,src){
this.tag = tag;
this.dom = document.createElement(this.tag);
this.dom.src = src;
document.body.appendChild(this.dom);
}
var img = new CreatImg("img","1.jpg");
*构造函数注意事项
构造函数有默认返回值,当在函数内添加return语句时
1 如果返回的是基本类型,如null,undefined,NaN,number,string,boolean时,忽略return语句,返回对象
2 如果返回的是对象,如DOM元素,[],{},RepExxp,function,Math() 等,执行返回语句,不返回默认对象
var num = 4;
var obj = {
num: 6,
fn:(function() {
this.num *= 2; //window.num*=2
num = num *2; //变量声明提升 NaN
var num = 4; //num = 4
return function() { //fn:function() {.... }
this.num *= 2;
num*=3;
alert(num);
}
})()
};
var fn = obj.fn; // window.num=8 num=NaN num=4 fn=function(){}
alert(num); //返回的是window.num=8;
fn(); // this-->window window.num=8*2=16 num=4*3=12 弹出num = 12
obj.fn(); //this--->obj obj.num=12 num=12*3=36
alert(window.num); //16
alert(obj.num); //12
2 new()
*调用函数的方式
1 圆括号直接调用
2 定时器调用
3 事件处理函数
4 对象打点调用
5 数组枚举调用
*new()实例:
function fn() {
console.log(this); // fn {}
this.name = "张小龙";
this.age = 30;
this.sex = "男";
}
var obj = new fn(); //new的作用,调用函数,返回一个名为fn的对象
console.log(obj); //fn {name: "张小龙", age: 30, sex: "男"}
new()内部执行机制:
1 在真正执行函数体之前,函数内部先默认创建一个局部变量,是一个fn{} 空对象
2 让函数内部this指向该空对象 this ===fn {}
3 执行函数体
4 函数体全部执行完毕,函数会返回该对象(返回函数上下文)
*构造函数
function Student(name,sex,age) {
this.name = name;
this.sex = sex;
this.age = age;
this.hobby = ["学习","运动","尊师爱友"];
this.study = function() {
alert("好好学习 天天向上");
}
}
//函数名首字母大写,以区别普通函数
var xiaoli = new Student("小丽","女",23);
var xiaohong = new Student("小红","女",18);
var xiaowei = new Student("小伟","男",24);
*构造函数操作DOM
//动态添加img便签
function CreatImg(tag,src){
this.tag = tag;
this.dom = document.createElement(this.tag);
this.dom.src = src;
document.body.appendChild(this.dom);
}
var img = new CreatImg("img","1.jpg");
*构造函数注意事项
构造函数有默认返回值,当在函数内添加return语句时
1 如果返回的是基本类型,如null,undefined,NaN,number,string,boolean时,忽略return语句,返回对象
2 如果返回的是对象,如DOM元素,[],{},RepExxp,function,Math() 等,执行返回语句,不返回默认对象