//函数的角色:
//函数的声明
function f1() {
console.log("我是函数");
}
f1();
//函数表达式
var ff=function () {
console.log("我也是一个函数");
};
ff();
========================================
//函数声明和函数表达式的区别:
//函数声明:
//函数声明
if(true) {
function f1() {
console.log("哈哈,我又变帅了");
}
} else {
function f1() {
console.log("小苏好猥琐");
}
}
f1();
//函数表达式
var ff;
if(true) {
ff = function() {
console.log("哈哈,我又变帅了");
};
} else {
ff = function() {
console.log("小苏好猥琐");
};
}
ff();
//函数声明如果放在if-else的语句中,在IE8的浏览器中会出现问题
//以后宁愿用函数表达式,都不用函数声明
================================================
函数中的this指向的问题:
-
函数中的this的指向
- 普通函数中的this是谁?-----window
- 对象.方法中的this是谁?----当前的实例对象
- 定时器方法中的this是谁?----window
- 构造函数中的this是谁?-----实例对象
- 原型对象方法中的this是谁?---实例对象
//严格模式:
"use strict";
//严格模式
function f1() {
console.log(this); //window
}
f1();
//普通函数
function f1() {
console.log(this);
}
f1();
//定时器中的this
setInterval(function() {
console.log(this);
}, 1000);
//构造函数
function Person() {
console.log(this);
//对象的方法
this.sayHi = function() {
console.log(this);
};
}
//原型中的方法
Person.prototype.eat = function() {
console.log(this);
};
var per = new Person();
console.log(per);
per.sayHi();
per.eat();
//BOM:中顶级对象是window,浏览器中所有的东西都是window的
===================================================
函数的不同的调用方式:
//普通函数
function f1() {
console.log("文能提笔控萝莉");
}
f1();
//构造函数---通过new 来调用,创建对象
function F1() {
console.log("我是构造函数,我骄傲");
}
var f=new F1();
//对象的方法
function Person() {
this.play=function () {
console.log("玩代码");
};
}
var per=new Person();
per.play();
==================================================
//函数是对象,对象不一定是函数
//对象中有proto原型,是对象
//函数中有prototype原型,是对象
function F1() {}
console.dir(F1);
console.dir(Math); //中有__proto__,但是没有prorotype
//对象中有__proto__,函数中应该有prototype
//如果一个东西里面有prototype,又有__proto__,说明是函数,也是对象
function F1(name) {
this.name = name;
}
console.dir(F1);
//所有的函数实际上都是Function的构造函数创建出来的实例对象
var f1 = new Function("num1", "num2", "return num1+num2");
//此处等价于:
function f1(num1,num2){
return num1+num2
}
console.log(f1(10, 20));
console.log(f1.__proto__ == Function.prototype);
//所以,函数实际上也是对象
console.dir(f1);
console.dir(Function);
网友评论