JS基础语法-作用域 全局变量 局部变量 变量提升 预解析 作用域链
arguments
1.arguments 的使用 只有函数才有 arguments对象 而且是每个函数都内置好了这个arguments
2.里面存储了所有传递过来的实参
3.伪数组
两种声明函数的方式
\1. 利用函数关键字自定义函数(命名函数)
function fn() {
}
fn();
\2. 函数表达式(匿名函数)
// var 变量名 = function() {};
注意:
/ (1) fun是变量名 不是函数名
/ (2) 函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值 而 函数表达式里面存的是函数
/ (3) 函数表达式也可以进行传递参数
JavaScript作用域
全局作用域: 整个script标签 或者是一个单独的js文件
局部作用域(函数作用域) 在函数内部就是局部作用域 这个代码的名字只在函数内部起效果和作用
全局变量和局部变量
\1. 全局变量: 在全局作用域下的变量 在全局下都可以使用
// 注意 如果在函数内部 没有声明直接赋值的变量也属于全局变量
\2. 局部变量 在局部作用域下的变量 或者在函数内部的变量就是 局部变量
// 注意: 函数的形参也可以看做是局部变量
\3. 从执行效率来看全局变量和局部变量
// (1) 全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
// (2) 局部变量 当我们程序执行完毕就会销毁, 比较节约内存资源
作用域链
内部函数访问外部函数的变量,采取的是链式查找的方式来决定取那个值 这种结构我们称为作用域链 就近原则
var num = 10;
function fn() { // 外部函数
var num = 20;
function fun() { // 内部函数
console.log(num);
}
fun();
}
fn();
预解析
js引擎运行js 分为两步: 预解析 代码执行
概念:
js引擎会把js 里面所有的 var 还有 function 提升到当前作用域的最前面
预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)
// (1) 变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
// (2) 函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数
对象
具体事物
一组无序的方法和属性,通过键值对的方式存储,多个属性和方法之间用逗号隔开
创建对象方式:
1.利用对象字面量创建对象 {},var obj = {}; // 创建了一个空的对象
2.利用 new Object 创建对象,var obj = new Object(); // 创建了一个空的对象
3.构造函数
//因为我们一次创建一个对象,里面很多的属性和方法是大量相同的 我们只能复制
// 因此我们可以利用函数的方法 重复这些相同的代码 我们就把这个函数称为 构造函数
// 又因为这个函数不一样,里面封装的不是普通代码,而是 对象
// 构造函数 就是把我们对象里面一些相同的属性和方法抽象出来封装到函数里面
function 构造函数名() {
this.属性 = 值;
this.方法 = function() {}
}
new 构造函数名();
构造函数
-
构造函数名字首字母要大写
-
我们构造函数不需要return 就可以返回结果
-
我们调用构造函数 必须使用 new
-
this指向,谁调用就指向谁
for (var k in obj) {
console.log(k); // k 变量 输出 得到的是 属性名
console.log(obj[k]); // obj[k] 得到是 属性值
}