javascript复习第三天

arguments 的使用:

只有函数才有 arguments对象 而且是每个函数都内置好了这个arguments

伪数组 并不是真正意义上的数组

1. 具有数组的 length 属性

2. 按照索引的方式进行存储的

3. 它没有真正数组的一些方法 pop() push() 等等

javascript的作用域:

1.JavaScript作用域 : 就是代码名字(变量)在某个范围内起作用和效果 目的是为了提高程序的可靠性更重要的是减少命名冲突

2. js的作用域(es6)之前 : 全局作用域 局部作用域

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

4. 局部作用域(函数作用域) 在函数内部就是局部作用域 这个代码的名字只在函数内部起效果和作用

变量的作用域:

        // 变量的作用域: 根据作用域的不同我们变量分为全局变量和局部变量
        // 1. 全局变量: 在全局作用域下的变量 在全局下都可以使用
        // 注意 如果在函数内部 没有声明直接赋值的变量也属于全局变量
        var num = 10; // num就是一个全局变量
        console.log(num);

        function fn() {
            console.log(num);

        }
        fn();
        // console.log(aru);

        // 2. 局部变量   在局部作用域下的变量   后者在函数内部的变量就是 局部变量
        // 注意: 函数的形参也可以看做是局部变量
        function fun(aru) {
            var num1 = 10; // num1就是局部变量 只能在函数内部使用
            num2 = 20;
        }
        fun();
        // console.log(num1);
        // console.log(num2);
        // 3. 从执行效率来看全局变量和局部变量
        // (1) 全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
        // (2) 局部变量 当我们程序执行完毕就会销毁, 比较节约内存资源

javascript没有块级作用域:

// js中没有块级作用域 js的作用域: 全局作用域 局部作用域 现阶段我们js 没有 块级作用域

// 我们js 也是在 es6 的时候新增的块级作用域

// 块级作用域 {} if {} for {}

// java

// if(xx) {

// int num = 10;

// }

// 外面的是不能调用num的

if (3 < 5) {

var num = 10;

}

console.log(num);

作用域链 : 内部函数访问外部函数的变量,采取的是链式查找的方式来决定取那个值 这种结构我们称为作用域链 就近原则

 var num = 10;

 function fn() { // 外部函数
 var num = 20;
 function fun() { // 内部函数
  console.log(num);
}
 fun();
}
fn();

预解析:

1. 我们js引擎运行js 分为两步: 预解析 代码执行

(1). 预解析 js引擎会把js 里面所有的 var 还有 function 提升到当前作用域的最前面

(2). 代码执行 按照代码书写的顺序从上往下执行

2. 预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)

(1) 变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作

(2) 函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数

利用对象字面量创建对象:

        // 1.利用对象字面量创建对象 {}
        // var obj = {};  // 创建了一个空的对象 
        var obj = {
                uname: '张三疯',
                age: 18,
                sex: '男',
                sayHi: function() {
                    console.log('hi~');

                }
            }
            // (1) 里面的属性或者方法我们采取键值对的形式  键 属性名 : 值  属性值 
            // (2) 多个属性或者方法中间用逗号隔开的
            // (3) 方法冒号后面跟的是一个匿名函数
            // 2. 使用对象
            // (1). 调用对象的属性 我们采取 对象名.属性名 . 我们理解为 的
        console.log(obj.uname);
        // (2). 调用属性还有一种方法 对象名['属性名']
        console.log(obj['age']);
        // (3) 调用对象的方法 sayHi   对象名.方法名() 千万别忘记添加小括号
        obj.sayHi();

变量,属性,函数,方法的区别:

1.变量和属性的相同点: 他们都是用来存储数据的  

变量和属性的差别:

变量: 单独声明并赋值 使用的时候直接写变量名 单独存在

属性: 在对象里面的不需要声明的 使用的时候必须是 对象.属性

2. 函数和方法的相同点: 都是实现某种功能做某件事

函数:单独声明 并且调用的,函数名() 单独存在的

方法:在对象里面,调用的时候,对象.方法()

利用new object创建对象:

利用构造函数创建对象:

        // 构造函数的语法格式
        // function 构造函数名() {
        //     this.属性 = 值;
        //     this.方法 = function() {}
        // }
        // new 构造函数名();
        function Star(uname, age, sex) {
            this.name = uname;
            this.age = age;
            this.sex = sex;
            this.sing = function(sang) {
                console.log(sang);

            }
        }
        var ldh = new Star('刘德华', 18, '男'); // 调用函数返回的是一个对象
        // console.log(typeof ldh);
        console.log(ldh.name);
        console.log(ldh['sex']);
        ldh.sing('冰雨');
        var zxy = new Star('张学友', 19, '男');
        console.log(zxy.name);
        console.log(zxy.age);
        zxy.sing('李香兰')

构造函数的特点:

1. 构造函数名字首字母要大写

2. 我们构造函数不需要return 就可以返回结果

3. 我们调用构造函数 必须使用 new

4. 我们只要new Star() 调用函数就创建一个对象 ldh {}

5. 我们的属性和方法前面必须添加 this

new关键字的特点:

  1. 在内存中创建一个新的空对象
  2. 让this只想这个新的对象
  3. 执行构造函数里面的代码,给这个新对象添加属性和方法
  4. 返回这个新对象(所以构造函数里面不需要return)

构造函数和对象:

        // 构造函数和对象
        // 1. 构造函数  明星 泛指的某一大类  它类似于 java 语言里面的  类(class)
        function Star(uname, age, sex) {
            this.name = uname;
            this.age = age;
            this.sex = sex;
            this.sing = function(sang) {
                console.log(sang);

            }
        }
        // 2. 对象 特指 是一个具体的事物 刘德华 ==  {name: "刘德华", age: 18, sex: "男", sing: ƒ}
        var ldh = new Star('刘德华', 18, '男'); // 调用函数返回的是一个对象
        console.log(ldh);
        // 3. 我们利用构造函数创建对象的过程我们也称为对象的实例化

new关键字的执行过程:

1. new 构造函数可以在内存中创建了一个空的对象

2. this 就会指向刚才创建的空对象

3. 执行构造函数里面的代码 给这个空对象添加属性和方法

4. 返回这个对象

遍历对象:

        // 遍历对象 
        var obj = {
                name: 'pink老师',
                age: 18,
                sex: '男',
                fn: function() {}
            }
            // console.log(obj.name);
            // console.log(obj.age);
            // console.log(obj.sex);
            // for in 遍历我们的对象
            // for (变量 in 对象) {

        // }
        for (var k in obj) {
            console.log(k); // k 变量 输出  得到的是 属性名
            console.log(obj[k]); // obj[k] 得到是 属性值

        }
        // 我们使用 for in 里面的变量 我们喜欢写 k  或者  key

小结:

  1. 对象可以让代码结构更清晰
  2. 对象复杂数据类型0object
  3. 本质:对象就是一组无序的相关属性和方法的集合
  4. 构造函数泛指某一大类
  5. 对象实例特指一个事物
  6. for......in语句用于对象的属性进行循环操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值