arguments的使用
JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。也就是说所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有的实参。arguments是一个伪数组,因此及可以进行遍历
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//求两个数的和
function getSum(x,y){
return x+y;
}
getSum(1,2);
//求三个数的和
function getSum(x,y,z){
return x+y+z;
}
getSum(1,2,3);
//求四个数的和
function getSum(a,b,c,d){
return a+b+c+d;
}
getSum(1,2,3,4);
// arguments对象---在函数内部获取调用时输入的参数的一个集合 伪数组
function f1(){
console.log(arguments);
console.log(arguments.length);
}
f1(11,21,31);
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>
</body>
</html>
作用域
作用域:变量可以起作用的范围
全局变量:var声明的变量,不在函数中声明,作用于任何位置,不能被删除
局部变量:作用于局部区域的变量,在函数中声明的变量,作用于函数内部
块级作用域:{}
现阶段js可以看做没有块级作用域
隐式全局变量:不要var声明的变量,直接赋值使用的变量,可以作用于全局作用域,可以被删除.
作用域链
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
if (true) {
var num1 = 1;
}
console.log(num1);//1
var num = 0;
while (num < 5) {
var number=1;
num++;
}
console.log(number);//1
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>
</body>
</html>
作用域链
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<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();
function f1() {
var num = 123;
function f2() {
var num;
console.log( num );
}
f2();
}
var num = 456;
f1();
</script>
</body>
</html>
对象
现实生活中:万物皆对象,对象是一个具体的事物,一个具体的事物就会有行为和特征。
举例: 一部车,一个手机
车是一类事物,门口停的那辆车才是对象
特征:红色、四个轮子
行为:驾驶、刹车
JavaScript中的对象其实就是生活中对象的一个抽象
JavaScript的对象是无序属性的集合。
其属性可以包含基本值、对象或函数。对象就是一组没有顺序的值。我们可以把JavaScript中的对象想象成键值对,其中值可以是数据和函数。
对象的行为和特征
特征---属性
行为---方法
对象字面量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var obj=new Object();
obj.name="张三";
obj.age=20;
obj.sex="男";
obj.qq=1433223;
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>
</body>
</html>
预解析
浏览器在解析js代码时,会提前将变量声明和函数的声明解析到当前作用域的最前面去
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<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);//undefined
num = 20;
}
num = 10;
fun();
//2
var a;
function f1() {
var b;
// var a;
b = 9;
console.log(a);//undefined
console.log(b);//9
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>
</body>
</html>