第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

JavaScript的構(gòu)造函數(shù)詞法作用域/作用域鏈(其實(shí)我什么都不會(huì)系列)

標(biāo)簽:
JavaScript

下面这个例子是考虑这种情景下:

  • 一个构造函数 内部返回一个相同的构造函数①
  • 这个构造函数的参数是一个函数 构造函数内的最后一行会执行这个参数 而这个参数还有一个参数这个参数是函数 类似于fn(fn(fn()))②
  • 构造函数内设置一个数组 一个私有变量 再加一个构造函数的属性 这样容易跟踪堆栈调用③
  • handle方法的参数是一个函数 而这个函数会将外部构造函数的show作为其参数使用 这时作为参数使用的show的词法作用域就被固定成了初始构造函数的作用域 不管这个handle如何调用 比如在⑤这个位置 通过handle对数组进行push操作 handle的作用域是外部构造函数 所以push的数组也就是外部的callbacks 所以可以看到随后的function(show){show()}函数显示为
      	show函数的作用域 第 1 个构造函数
      	[ 1 ]
      
  • 而紧跟后面的show() 却显示为
      	show函数的作用域 第 2 个构造函数
      	[]
      

因为在内部返回的构造函数的参数 传入了show函数 而这个show函数的作用域是内部的构造函数作用域

  • 再看下面的代码 直接console.log(callbacks) 并没有显示内部构造函数的私有变量(数组) 而是显示了外部构造函数的callbacks 这是作用域的概念 只不过套上了构造函数这么个东西
i = 1;
function A(fn){
	var callbacks = [],
		aa = i;
	A.ii = i++;

	this.then = function(){
		return new A(function(show){
			handle(1,function(show){ show();});
			show();
			// console.log(show);
			console.log(callbacks);
		})
	}
	function handle(sth,fn){
		callbacks.push(sth);
		console.log('handle函数的作用域 第',aa,'个构造函数');
		fn.call(null, show);
	}
	function show(){
		console.log('show函数的作用域 第',aa,'个构造函数');
		console.log(callbacks);
	}
	fn(show);
}

a = new A(function(){});
a.then();

图片描述
①②③④⑤⑥⑦⑧⑨⑩

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消