前言
本篇文章对arg,函数、作用域以及预解析的概念以及理解,这也代表相对基础的JS知识差不多结束了,在看文章之余也要多多练习观看相关视频加以理解!
一、arguments参数
概念:当不确定有多少个参数传递的时候,可以用 arguments 来获取参数,arguments 对象中存储了传递的所有实参
其实arguments 是一个伪数组,因此可以进行遍历。伪数组的特点如下
-
具有 length 属性
-
按索引方式储存数据
-
不具有数组的 push、pop 等等方法
二、函数的声明
- 利用function关键字声明(命名函数)
- 函数表达式(匿名函数)
三、作用域
概念:一段代码中所用到的名字并不总是有效的,而限定这个名字有效性的范围就是作用域
作用:提高程序的可靠性,减少冲突
分类:①全局作用域作用于script标签内②局部作用域作用于函数内的代码环境,也称为函数作用域
那么变量在不同作用域也有了不同的分类
全局变量:在全局作用域下声明的变量叫做全局变量(在函数外部定义的变量)
-
全局变量在代码的任何位置都可以使用
-
全局作用域下,var 声明的变量是全局变量
-
一般情况下,函数内不使用 var 声明的变量也是全局变量(不建议使用)
局部变量:在局部作用域下声明的变量叫做局部变量(在函数内部定义的变量)
-
局部变量只能在该函数内部使用
-
在函数内部 var 声明的变量是局部变量
-
函数的形参实际上也是局部变量
两者的区别:
-
全局变量:在任何一个地方都可以使用,只有在浏览器关闭时才会被销毁,因此比较占内存
-
局部变量:只在函数内部使用,当其所在的代码块被执行时,会被初始化。当代码块运行结束后,就会被销毁,因此更节省内存空间
四、作用域链
概念:内部函数可以访问外部函数的变量,这种实现机制就是作用域链,这种查找方式就叫链式查找
var age = 19;
function fn1() { // 外部函数
var age = 18;
function fn2() { // 内部函数
console.log(age); // 就近原则
}
}
采取就近原则的方式来查找变量最终的值
五、预解析
概念:JS 解析器在运行代码的时候分为两步:预解析和代码执行
-
预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把当前作用域下带有 var 和 function 声明的变量在内存中进行提前声明或者定义(提升到当前作用域的最前面)
-
代码执行: 从上到下执行JS语句
变量预解析:变量提升只提升声明,不提升赋值
console.log(age); // 代码运行分为先预解析再代码执行,很明显这一句是代码执行,那前面肯定也就进行了预解析
var age = 19;
函数预解析:函数声明代表函数整体,所以函数提升后,函数名代表整个函数,但是函数并没有被调用!
问题:用函数表达式的形式声明函数问题
// fn is not a function
fn();
// 用 var 声明的会被当做变量进行预解析
var fn = function() {
console.log('hello world');
}
六、对象
此对象非彼对象~
概念:对象是一组无序的相关属性和方法的集合
对象由属性和方法的形式组成
创建对象的三种方式
- 使用对象字面量创建对象
- 利用new Object()创建对象
- 利用构造函数创建对象
前两种方式只能一次创建一个对象,详解一下第三种方式
构造函数和对象的关系
-
构造函数里面封装的不是普通代码(例如求和),而是对象
-
构造函数就是把对象里面相同的属性和方法抽象出来放到函数里面
-
通过构造函数可以创建对象
-
构造函数指某一类,例如动物,人,对象指类中的某一个,例如小狗,小花
-
利用构造函数创建对象的过程称为实例化对象
有不明白的或者有其他问题的可以评论区留言噢
今天的知识分享就到这里啦~希望大家在这能学到知识一起分享一起进步,成为更好的自己!
当然,如果觉得写的还不错的可以动动发财的小手点个赞~