arguments的使用

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>

猜你喜欢

转载自blog.csdn.net/weixin_44740410/article/details/88675894
今日推荐