函数(arguments),作用域,预解析,对象

函数(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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值