JS 函数-对象
函数
1、函数命名规则和规范(上一节有)
2、函数覆盖
function fun1() {
console
.log(1);
}
fun1();
var fun1 = function() {
console
.log(2);
}
fun1();
1.如果两个函数都是函数声明,后面的会覆盖前面的,函数调用位置不同结果相同;
2.如果两个函数都是函数表达式,后面的会覆盖前面的,函数调用位置不同结果不同。
3、函数的arguements对象
任何一个函数都有一个内置对象:arguements--伪数组
arguements属性
callee--函数本身
name--函数名
length--(函数声明时)形参的个数
length--(函数调用时)实参的个数
------各个属性都有自己的含义
4、匿名函数-自调用
(function() {
console
.log("匿名函数");
})
(function() {
console
.log("匿名函数");
})();
5、函数作为参数传入或传出
函数也是一种数据类型
function fun1(x
) {
x();
}
fun1(function() { console
.log("函数作为参数传入")});
function fun2(x
) {
return x
;
}
var a
= fun2(function() { console
.log("函数作为参数传出")});
a();
预解析
预解析指的是JS引擎在对JS代码解释执行之前,会对JS代码进行预解析,会将关键字var 和function开头的语句块提前进行处理。
函数的提升
fun1();
function() {
console
.log("提升");
}
function() {
console
.log("提升");
}
fun1();
注意:
函数声明会提升
函数表达式不会提升
函数提升不会超过作用域
变量的提升
console
.log(num1
);
var num1
= 10;
var num1
;
console
.log(num1
);
num
= 10;
同名覆盖
1、同名函数
同名函数声明,会发生覆盖,且调用位置不同,结果相同。
函数表达式不会预解析,但是同样会同名覆盖,且调用位置不同,结果不同
同名情况下,函数表达式 可以覆盖 函数声明,函数声明 不能覆盖 函数表达式
2、同名函数与变量
按照常规的书写顺序,同名的函数与变量,变量会覆盖函数
预解析,同名的函数与变量,函数会覆盖变量
作用域
全局作用域
1.直接编写在script标签之中的JS代码,都是全局作用域
2.或者放在单独的JS文件中
注意:1.全局作用域在页面加载时创建,关闭时销毁
2.在全局作用域中有一个全局对象window
局部作用域
函数内部,函数执行完,函数内部变量等会销毁。
作用域链
隐式全局变量
1、凡是没有用var定义的变量都是全局变量
2、
对象
JS创建对象的四种方法
var person
= {
name
: "严越",
age:
18,
sex
: true,
eat
: function(){console
.log("I`m eatting.");},
sleep
: function(){console
.log("I`m sleeping")}
}
var person1
= new Object();
person
.name
= "yanyue";
person
.age
= 24;
function createPerson(name
, age
, sex
) {
var p1
= new Object();
p1
.name
= name
;
p1
.age
= age
;
p1
.sex
= sex
;
p1
.eat = function(){console
.log("I`m eatting.");};
p1
.sleep = function(){console
.log("I`m sleeping.");};
return p1
;
}
var p1
= createPerson("yy", 25, true);
console
.log(p1
);
function Person(name
, age
, sex
) {
this.name
= name
;
this.age
= age
;
this.sex
= sex
;
this.eat = function(){console
.log("I`m eatting.");};
this.sleep = function(){console
.log("I`m sleeping.");};
}
var p2
= new Person("yylh", 26, true);
console
.log(p2
);
p2
.eat();
new
1、创建一个新的对象;
2、可以让构造函数中的this指向实例化对象
3、返回一个对象
this
1、构造函数中的this指向实例化对象
2、对象方法中的this指的是当前对象
3、普通函数中的this指的是window
对象遍历
for(x in person){
console.log(person[x]);
}