2020-10-26js作用域 对象

本文介绍了JavaScript中的作用域概念,包括全局与局部作用域的区别、作用域链的工作原理及预解析过程。同时,还详细讲解了通过字面量、new Object及构造函数创建对象的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子:调用函数  输入函数然后输出二月份的天数。

function isRunYear(year) {
            var flag = false;
            if ((year % 4 == 0 && year % 100 !== 0) || year % 400 == 0) {
                flag = true;
            }

            return flag;
        }

        function backDay() {
            var year = prompt("请你输入年份");
           
            if (isRunYear(year)) {  //当上一个函数的值为true的时候 则if内的条件成立
                alert("当前年份是闰年 2月份有29天");
            } else {   //当函数值为false的时候,if内的值是false,
                alert("当前年份是平年,二月份有28天");
            }
        }
        backDay();

函数的两种声明方式:

 var fun=function(){
            console.log("我是函数表达式");
        }   //定义函数
        fun();//调用函数   第一种


function fn(){

        }
        fn();   //第二种

注意:

  1. fun是变量名,不是函数名。
  2. 函数表达式声明方式跟声明变量差不多。只不过是变量表达式里面存的是值,函数表达式里面存的是函数
  3. 函数表达式也可以进行传递参数

js作用域:

  1. 能够说出js的两种作用域
  2. 能够区分全局变量和局部变量
  3. 能够说出如何在作用域中查找变量的值

学习内容:

  1. 作用域
  2. 变量的作用域
  3. 作用域链

 

作用域:限定这个名字的可用性的代码范围就是这个名字的作用域,作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。为了提高程序的可靠性。

作用域的范围(es6):现阶段是es5,分为全局作用域以及局部作用域。

全局作用域:整个script标签或者是单独的 js文件

局部作用域:在函数内部就是局部作用域,这个代码的名字只在函数内部起效果和作用

 

变量根据作用域的分类:根据作用域 不同,分为全局变量局部变量。

全局变量在全局作用域下的变量,在全局下都可以使用

注意:如果函数内部,没有声明直接赋值的变量也属于全局变量

局部变量:在局部作用下的变量,在函数内部的变量就是局部变量

注意  函数的形参也可以看作是局部变量。

从执行效率上看,全局变量在浏览器关闭的时候才会销毁,比较占内存资源

局部变量,当我们程序执行完毕就会销毁,比较节约内存资源

(js中没有块级作用域,js是在es6的时候新增的块级作用域。  块级作用域{})

 

作用域链:

只要有代码就会有作用域,函数内部叫局部作用域,如果函数内部中还有函数,那么这个作用域中又可以诞生一个作用域。

内部函数可以访问外部函数的变量,用链式查找决定那些数据能被内部函数访问,就称为作用域链。

例子:作用域链查找遵循 就近原则

 

 

js预解析:

  1. 能够知道解析器运行js分为哪两步骤
  2. 能够说出变量提升的步骤和运行过程
  3. 能够说出函数提升到步骤和运行过程

学习内容:

  1. 预解析
  2. 变量预解析和函数预解析
  3. 预解析案例

预解析:

//2问
        console.log(num);
        var num = 10; //undefined   坑1

        //相当于执行了以下:
        var num;
        console.log(num);


        //3问   为什么可以在函数上面调用
        fn();
        function fn() {
            console.log(11);
        }


        
        //4问
        fun(); //报错  坑2  为什么不可以在函数上面调用 
        var fun = function() {
            console.log(22);
        }

       // 相当于执行了以下代码
       var  fun;
       fun();
       fun=function(){
           console.log(22);
       }


//函数表达式,调用必须写在函数表达式的下面


        //1.js是由浏览器中的js解析器来执行的,js解析器在运行js代码的时候分为两步:预解析和代码执行

        //(1)预解析:js引擎会把里面所有的  var  还有  function  提升到作用域的最前面
        //(2)代码执行  ,按照代码执行的顺序从上往下执行

        //2.预解析分为变量预解析(变量提升)和函数预解析(函数提升)
        //(1)变量提升就是把所有的变量声明提升到当前的 作用域的最前面,不提升赋值操作
        //(2)函数提升就是把函数所有的声明提到作用域的最前面   不带用函数

案例:全局变量的使用以及预解析

 f1();
        console.log(c);
        console.log(b);
        console.log(a);


        function f1() {
            var a = b = c = 9; //相当于  var a=9;b=9;c=9;  b和c前面没有var   则当全局变量看
            console.log(a);
            console.log(b);
            console.log(c);
        }


        //相当于以下代码
        function f1() {
            var a;
            a = b = c = 9;
            console.log(a);
            console.log(b);
            console.log(c);
        }
        f1();
        console.log(c);
        console.log(b);
        console.log(a);/*9
text.html:28 9
text.html:29 9
text.html:10 9
text.html:11 9
text.html:12 Uncaught ReferenceError: a is not defined
    at text.html:12*/

注意:当函数内部直接赋值而没有声明的话就是全局变量

 

js对象:

学习目标:

  1. 能够说出为什么需要对象
  2. 能够使用字面量创建对象
  3. 能够使用构造函数创建对象
  4. 能够说出new的执行过程
  5. 能够遍历对象

 

学习内容:

  • 对象
  • 创建对象的三种方式
  • new关键字
  • 遍历对象属性

什么是对象:对象是一个具体的事物,看得见摸得着的食物。对象是一组无序的相关属性和方法的集合,所有的事物都是对象。

属性:事物的特征   方法:事物的行为

为什么需要对象:

如果想要保存一个人的完整信息,就要使用对象比较方便

person.name=‘张三丰’
person.sex='女‘

创建对象(object)的三种方式:

  1. 利用字面量创建对象

    var obj={};//创建了一个空的对象

     

  2. 利用new Object创建对象
  3. 利用构造函数创建对象

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值