
你不知道的javascript笔记
文章平均质量分 65
sxc_
这个作者很懒,什么都没留下…
展开
-
关于this
函数的this执行并不指向于函数本身,在全局作用域里面函数的this并不指向于它本身,而是window(下一篇详解),假设你想去通过给这个函数上面定义一个变量来记录这个函数执行了几次,每次调用执行this.变量名++,这是不行的并且window对象上面出来了这个变量名,涉及到this的默认绑定(下一篇详解)此时打印出来的为元素本事,使用console.dir打印出来好观察它的属性,不了解的可看我前面的。所以匿名函数(没有名称的函数叫匿名函数)在不使用上面那个危险的方法嵌套下没有办法调用本身。原创 2023-04-22 20:27:59 · 203 阅读 · 0 评论 -
块作用域的替代方案
语法如上,在try里面去写一些代码,在发生错误时通过throw来抛出错误,比如你在try里面发送了一个请求,在请求失败或是异常的时候抛出了一个错误,让catch来处理,它会接收你抛出错误的内容,比如说你抛出一个2,它就会接收一个2。最推崇的自然是es6中的let,既不用书写try catch那样丑陋的代码,也适用于一切,当你想要将使用let的代码转化为es3这样的环境,很多打包工具都有这样的功能,babel就是其中之一。函数表达式不适用于所有场景,需谨慎使用。一.try catch。原创 2023-04-16 12:14:18 · 133 阅读 · 0 评论 -
动态作用域
咱们可以使用this来模拟动态作用域,已知this是谁调用this指向谁,动态作用域则是会在你调用函数的地方去向上寻找变量,而不是像词法作用域一样早就声明好了,this和动态作用域两者的共同特点是都取决于调用位置。虽然说JavaScript只有词法作用域,如果你的代码没有使用with和eval的话,动态作用域会将你的代码在解析的时候确定下来,并没有动态作用域这一说,但是它却有一个和像动态作用域的东西,那就是this。原创 2023-04-16 10:55:47 · 106 阅读 · 0 评论 -
作用域闭包
定义:当一个函数可以访问到其它函数局部声明变量的函数,就是闭包。举个例子有一个函数,它的属性一般情况我们访问不到,这涉及到函数作用域。而闭包就是在这个函数内部再次声明一个函数,这个函数基于作用域的查询访问的到它上面函数的私有变量,我们将这个访问函数返回回去,那么我们就可以通过这个返回函数访问到变量,这就是闭包。原创 2023-04-16 01:35:29 · 73 阅读 · 0 评论 -
JavaScript的声明提升
原因是var 声明的变量会提前到当前作用域的顶部去声明,并给变量默认赋值为undefined。函数也有变量提示,不过仅限于直接通过function声明的具名函数,函数表达式则不会被提升,那怕他是一个具名函数。然后解析到了bar,又通过RHS查询,发现这个变量被function声明过了,直接跳过var声名。关键字function和var声明的变量都会存在变量提升,提前到当前作用域的顶部去进行声明。函数声明和变量声明同时存在的时候会先去声明函数,然后再声明变量。实际的执行顺序是这样的。然后调用了bar()原创 2023-03-26 20:56:23 · 67 阅读 · 0 评论 -
函数作用域和块作用域
声明的i在for循环内部()声明但是它却污染可全局变量,if语句也是一样name在{}中声明了,但是在if外部我仍然可以访问到它,这是不合理的,在es6的let之间if{}声明的变量和for循环()内声明的变量都回直接无视掉这个作用域将变量声明到了全局作用域上面去,let出来后我for循环声明的变量只能在循环的内部访问到,if语句也是一样,便于浏览器通过垃圾回收机制,去回收变量,提高性能。当你需要引入多个第三方工具库如果,这个工具库没有遵循这个原则,那么会发现我们的全局作用域上面是非常的乱。原创 2023-03-26 19:11:43 · 69 阅读 · 0 评论 -
js作用域详解
带你认识JavaScript作用域原创 2023-02-27 22:42:33 · 115 阅读 · 0 评论 -
词法作用域的理解
eval和with在2023年你应该避免使用这两个祸害,共同缺点都是性能不好,给setTimeout和 setInterval传递第一个参数,可以起到和eval一样的效果,new Function也是,其传递的最后一个参数也是和eval一样的。在严格模式下,with被完全砍掉其作用,eval没那么严重,但也"残血"了,足以可以看出其危害。本篇对标于你不知道的JavaScript上卷第一部分第二章,是作者整理的笔记,例子基本都是采用书中的。原创 2023-03-01 23:00:30 · 83 阅读 · 0 评论