目录
  1. 1. 前言
  2. 2. this与闭包
    1. 2.1. this
    2. 2.2. 闭包
  3. 3. JSON与js对象的区别与联系(转自菜鸟)
  4. 4. 变量提升
  5. 5. null与undefined
js中关于this,闭包,以及json与js对象的区别

前言

日常吐槽,宅了几天,感觉又是那啥了,爬个四楼好像都有点费劲!!!

this与闭包

this

一个new的对象内部的this是指向这个对象,而其他的this则是指向window对象。
面向对象语言中 this 表示当前对象的一个引用。
类似 call() 和 apply() bind()方法可以将 this 引用到任何对象。这里不细说
举个栗子:

function person(firstname,lastname)
{
this.firstname=firstname;
this.lastname=lastname;
}

var p1=new person("John","Doe");
var p2=person("Sally","Rally");
console.log(p1) // this 输出一个 person 对象
console.log(p2) // this 输出 window 对象
上面说过一个new对象中的this才指向该对象,像p2虽然也是一个新声明的对象,
但是他因为没有new ,this也是指向window对象的

闭包

闭包就是可以访问一个对象或者是函数内部的对象或者变量,而不被外界所销毁,一个私有的栈环境
可以通过下面的例子才创建闭包
也是菜鸟里的一个例子
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();

add(); //1
add();//2
add();//3
  1. 菜鸟的话:
    变量 add 指定了函数自我调用的返回字值。
    自我调用函数只执行一次。设置计数器为 0。并返回函数表达式。
    add变量可以作为一个函数使用。非常棒的部分是它可以访问函数上一层作用域的计数器。
    这个叫作 JavaScript 闭包。它使得函数拥有私有变量变成可能。
    计数器受匿名函数的作用域保护,只能通过 add 方法修改。

  2. 对我来说:
    分析一下add的this属于谁?答案还是window,但是如何能访问并且修改到add里面的counter呢,
    就是因为上一个博客里也有讲的静态作用域啦,向上一层寻找,找到counter。

JSON与js对象的区别与联系(转自菜鸟)

简单来说,可以这么理解:JSON 是 JS 对象的字符串表示法。它使用文本表示一个 JS 对象的信息,(JSON)本质是一个字符串。

var obj = {a: 'Hello', b: 'World'}; //这是一个js对象,注意js对象的键名也是可以使用引号包裹的,这里的键名就不用引号包含
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串
JSON(格式字符串) 和 JS 对象(也可以叫JSON对象 或 JSON 格式的对象)互转(JSON.parse 和 JSON.stringify)。
要实现从JSON字符串转换为JS对象,使用 JSON.parse() 方法:
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'} 一个对象
要实现从JS对象转换为JSON字符串,使用 JSON.stringify() 方法:
var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}' 一个JSON格式的字符串

说句不严谨的话:JSON.parse() 就是字符串转 js 对象, JSON.stringify()就是 js 对象转字符串,它们前提是要 json 格式才有意义。

变量提升

先使用,初始化
再定义
t = 3;//正确
var t;

null与undefined

  1. undefined:是所有没有赋值变量的默认值,自动赋值。
  2. null:主动释放一个变量引用的对象,表示一个变量不再指向任何对象地址,用来释放内存,空间。
文章作者: ruqiuvy
文章链接: https://github.com/yiyeruqiuvy/2022/04/12/js%E4%B8%AD%E5%85%B3%E4%BA%8Ethis%EF%BC%8C%E9%97%AD%E5%8C%85%EF%BC%8C%E4%BB%A5%E5%8F%8Ajson%E4%B8%8Ejs%E5%AF%B9%E8%B1%A1%E7%9A%84%E5%8C%BA%E5%88%AB/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 一夜入秋非生之所
打赏
  • 微信
  • 支付寶

评论