函数(arguments)
JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。也就是说所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有的实参。arguments是一个伪数组,因此及可以进行遍历
function getSum(){
//arguments:伪数组
var sum=0;
for(var i=0;i<=arguments.length-1;i++){
sum+=arguments[i];
}
return sum;
}
console.log(getSum(1,2,3));
console.log(getSum(1,2,3,4));
作用域
作用域:变量可以起作用的范围
<script>
if (true) {
var num1 = 1;
}
console.log(num1);
var num = 0;
while (num < 5) {
var number=1;
num++;
}
console.log(number);
function f1(){
var num=1;
console.log(num);
num1=100;//隐式全局变量,作用范围:全局作用域
}
f1();
console.log(num);//报错:函数内部声明的变量,只能作用于函数内部
delete num1;
console.log(num1);
var num=10;
delete num;//全局变量不能被删除,
console.log(num);
var num=10;
console.log(num);
</script>
作用域链
只有函数可以制造作用域结构, 那么只要是代码,就至少有一个作用域, 即全局作用域。凡是代码中有函数,那么这个函数就构成另一个作用域。如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域。
将这样的所有的作用域列出来,可以有一个结构: 函数内指向函数外的链式结构。就称作作用域链。
//0级作用域
// var num=10;
function f1(){
// 1级作用域
// var num=20;
function f2(){
// 2级作用域
// var num=30;
function f3(){
// 3级作用域
// var num=40;
console.log(num);//报错----所有的作用域都没有声明这个变量
}
f3();
}
f2();
}
f1();
预解析
JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程;
预解析过程:
把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
先提升var,在提升function
<script>
console.log(num);
num = 10;
console.log(num);
f1();//调用f1
f2();
f2 = function () {
console.log("匿名函数");
};
var a;
function abc() {
var a;
alert(a);//undefined
a = 10;
}
a = 25;
abc();
// 如果变量和函数同名的话,函数优先
var a;
function a() {
console.log('aaaaa');
}
console.log(a);// 函数体----如果变量和函数同名的话,函数优先
a = 1;
console.log(a);
var num;
function fun() {
var num;
console.log(num);
num = 20;
}
num = 10;
fun();
//2
var a;
function f1() {
var b;
var a;
b = 9;
console.log(a);
console.log(b);
a = '123';
}
a = 18;
f1();//调用的时候才会执行函数体内的代码
// 3
function f1() {
var a;//局部变量
c=9;//隐式全局变量
b=c;//隐式全局变量
a=b;
var a = b = c = 9;
console.log(a);//9
console.log(b);//9
console.log(c);//9
}
f1();
console.log(c);//9
console.log(b);//9
console.log(a);// 报错
</script>
对象
为什么要有对象?
函数的参数如果特别多的话,可以使用对象简化
什么是对象?
现实生活中:万物皆对象,对象是一个具体的事物,一个具体的事物就会有行为和特征。
<script>
var obj=new Object();
obj.name="邱慧";
obj.age=21;
obj.sex="女";
obj.qq=233333;
obj.eat=function(){
console.log("努力学习");
};
obj.study=function(){
console.log("学习使我快乐");
};
console.log("我叫:"+obj.name);
console.log("年龄:"+obj.age+"岁");
console.log("性别:"+obj.sex);
console.log("QQ:"+obj.qq);
// 使用方法:调用方法 obj.方法名();
obj.eat();
obj.study();
</script>