当前位置: 代码迷 >> 综合 >> 2020-10-26js作用域 对象
  详细解决方案

2020-10-26js作用域 对象

热度:58   发布时间:2024-03-08 13:12:40.0

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

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 definedat text.html:12*/

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

 

js对象:

学习目标:

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

 

学习内容:

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

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

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

为什么需要对象:

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

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

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

  1. 利用字面量创建对象

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

     

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