JS复习4-----继续深入

  • JS this关键字
    a.面向对象语言中,this表示当前对象的一个引用,但在JS中this不是固定不变的,它会随着执行环境的改变而改变,具体如下:
    1 在方法中,this表示该方法所属的对象
    2 如果单独使用,this表示全局对象
    3 在函数中,this表示全局对象
    4 在函数中,在严格模式下,this是未定义的
    5 在事件中,this表示接收事件的元素
    6 类似call()和apply()方法可以将this引用到任何对象上
    注意:this只有在函数调用的时候才会发生绑定,谁调用了函数,就绑定谁
    b.显式函数绑定
    在JS中函数也是对象,对象则有方法,apply和call就是函数对象的方法。他们允许切换函数执行的上下文环境(context),即this绑定的对象。
    例子
    var person1 = {
         fullName: function() {
             return this.firstName + this.lastName;
             };
     var person2 = {firstName: 'John', lastName: 'Doe'}  ;    
     person1.fullName.call(person2);  //返回John Doe
     //就是让函数在指定对象上调用,this在调用的时候发生绑定,指向person2
    
    c.关于this,分享一个我以前做过的挺有意思的一个题,:
    //下面这段JS程序的执行结果是什么
    var user = {
    count: 1,
    getCount: function() {
    return this.count;
    }
    }
    var func = user.getCount;
    console.log(func();
    
    我先将结果告诉你,是undefined,给你5分钟思考。
    好了,我来解答:
    我上面说过,this只有在函数调用的才会发生绑定,谁调用的绑定谁。那么是谁调用的这个函数呢?其实题目绕了一个弯子,它声明了一个变量接收user对象的对象方法getCount,很明显func是一个函数类型的变量,这个变量是在哪儿声明的呢?显而易见,函数外部,在函数外部声明的变量是什么?是全局变量,全局变量是属于哪个对象的?默认是属于window对象的,所以下面函数的调用func(),就等同于window.func(),这样的话,this肯定就绑定window对象了。然后我们看里面执行的代码,this.count就等同于执行window.count,这样一个语句就相当于是声明了一个变量但是没有赋值,这样的变量打印出来肯定就是undefined,如果里面this,就是执行return count,这就相当于直接使用一个没有声明的变量,程序肯定就会报错了
    如果window.count没有懂,不妨看看下面这个例子:
     var person = {
     name : 'John Doe'
     }
     person.age = 10; //JS中是支持这样给一个对象添加一个属性的,这句话就是声明添加一个属性并赋值
     person.sex;         //这就相当于声明了一个属性不赋值
     console.log(person.sex)  //undefined
     //window对象是一个JS预先已经定义好的对象,这下懂了吧
    
  • JS let和const
    a.let声明的变量拥有块级作用域({}内)
    b.const声明一个只读的常量,一旦声明,常量的值就不能改变,同样也是块级作用域
    c.var声明的变量不具备块级作用域,在块内重新声明变量也会重新声明块外的变量,let不会
    var x = 10;
    {var x = 2;}   //x最终输出2
    var y = 10;
    {var y = 2}; //y最终输出10
    
    d.在函数体内(外)使用var和let关键字声明的变量类似,作用域都输局部(全局)的
    HTML代码中使用全局变量:
    使用var关键字声明的全局作用域变量属于window对象
    使用let关键字声明的全局作用域变量不属于window对象
    e. var存在变量提升(hoisting),支持先使用后声明,let不行
    f. const声明的变量必须初始化
    g. const的本质:const定义的常量并非真正的常量,并非不可变,它定义了一个常量引用值。使用const定义的对象或者数组,其实是可变的,从这里我们可以得出:const声明的变量不能改变的是它的地址引用,而这个地址上的内容我们是可以修改的。比如:
const car = {type: 'Fiat', model: '500', color: 'white'};
car.color = 'red';  //这个改变时允许的,而且是可以奏效的
//car = {...};  //数组是一样的,不写了,能偷懒就偷懒

h. const不存在变量提升

  • JS JSON
    a. JSON是用于存储和传输数据的格式,通常用于服务端向网页端传递数据
    b. 什么是JSON,全拼是(JavaScript Object Notation) JS对象表示法
    JSON是一种轻量级的数据交换个事
    JSON是独立的语言
    JSON易于理解
    c. JSON语法规则
    数据为键/值对
    数据由逗号分隔
    大括号保存对象
    方括号保存数组
    d. JS中的两个方法
    JSON.parse() 将JSON字符串转成JS对象
    JSON.stringify() 将JS值转成JSON字符串

  • JS void
    a. JavaScript: void(0)的含义
    void操作符指定要计算一个表达式但是不返回值
    void(alert(‘xxx’)) //不返回值,但是括号内的表达式还是要执行
    b. href = “#” 与 href = "javascript: void(0)"的区别
    #包含了一个位置信息,默认的锚记是#top也就是网页的上端,而javascript:void(0)仅仅表示一个死链接

  • JS代码规范(老生常谈,一次没记)
    a. 变量使用驼峰命名法
    b. 通常在运算符前后添加空格
    c. 4个空格缩进
    d. 以分号结尾
    e. 每行代码字符数小于80

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值