JavaScript学习(四)(call,apply,bind,AO与GO对象&scope,if的问题)(未完成)Σ(っ °Д °;)っ

call,apply,bind关键字

一.call

1.一般来说,当函数或者构造函数中,含有this关键字这类程序
如果不调用就不会运行,也就是说,当去调用函数的时候,this才会指向调用者的名字,所以不运行就不知道this指向的到底是谁。

2.当使用call关键字时,如下

` 			// var obj1={name:"jack",age:18,say:function (arg1,arg2) {
			// 	console.log(arg1,arg2)
			// 	console.log(this.name,this.age)
			// }}
			// var obj2={name:"xxxxx",age:"xxxx"}
			
			// obj1.say()
			// obj2.xxx=obj1.say
			// obj2.xxx()
			
			// obj1.say.call(obj2,100,200)
`

最后一行代码就是call的用法
先看个简单的obj1.say.call(obj2) 这里就是说将obj2指定为函数obj1.say的调用者,所以当你去使用obj1.say.call(obj2) 时里面的this指向的就是obj2,打印的name,age都是obj2的name,age

关于 obj1.say.call(obj2,100,200),这里就是先将函数的调用者标明为obj2,然后再传入100,200这两个参数

二.apply

1.apply和call类似,唯一不同的就是在传入参数的时候,传入的数据要用数组来传递例如 obj1.say.call(obj2,[100,200])

三.bind

1.bind也是设计用来指向函数的调用者的,与apply,call的区别就是bind是在设计函数时就已经把函数的调用者写好了,call和apply是在使用时再去传入指定的函数调用者。
2.不过声明的函数一般来说不能直接绑定,只能方法直接绑定,如

var obj2={name:'karen',say:function() {
		 	console.log(this)
		  }.bind(obj1)}

补充 ↓

AO与GO对象&scope (未解决)

来源:CSDN网友的见解
来源:CSDN网友的见解
附上人家的理解,自己写着头疼,消化了再写
关于scope和AOGO对象实际上两者是相关的,简单的来说
AO&GO是脚本运行之前,函数的预编译和全局的预编译。

当函数声明时,就会诞生[[scope]]这个属性,他是函数本身自带的但是无法调用,它的作用是形成一个作用域,如果是嵌套函数的话,内部的函数在外部函数调用时,它的scope才生成,所以也有种理解就是为什么外部函数不能访问内部函数的数据,就是以上的情况
但是也有一种方法可以访问内部数据,就是return,return能把内部scope返回出来,当然,还是要内部函数的scope生成之后才可以
四,垃圾回收机制与内存泄漏
来源:CSDN网友的见解

阮一峰的日志

偷懒again hhh

2019年11月22日补充

涉及到垃圾回收以及预防内存泄漏Es6专门提供了两种数据结构专门用于这种情况

  1. WeakSet
  2. WeakMap

到此结束

if的一些小问题

这里就是说,if内部不能声明函数,如果你声明了,虽然不会报错,但是函数也不会运行,算是无效代码

function fn() {
            if (false) {
           		function b() {
                console.log(666)
                }
            }
        	console.log(b)//api==>if里面不能声明函数   浏览器==>不会报错
			b()
    }
    fn()

这里是一个例子,当当当if的判断为false时(打字也能口吃???),b的打印结果是这个函数未定义,照常理来说,么有函数不谈作用域,所以函数b应该和打印语句是同一个作用域下的,就算判断条件失败,至少也会有b函数的声明,应该是undefined而非b不是一个函数(这里是按照假逻辑来推的实际上这种说法就是错的),所以通过这里就知道不应该在if语句内部写函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值