首页 >

简单谈谈javascript中this的隐式绑定

web前端|js教程简单谈谈javascript中this的隐式绑定
javascript,this,隐式绑定
web前端-js教程
我们先来看一个例子
金融借贷系统源码,vscode进入文件夹,ubuntu关机崩溃,tomcat删除自带web,爬虫数据+php,php 时间戳取年份,东莞网络推广seo哪里好,免费vip视频网站源码,bootstrap 分页模板lzw
function foo() {  console.log( this.a );}var obj = {  a: 2,  foo: foo};obj.foo(); // 2
this指向了obj,因为foo执行时的call-site(可以理解为调用时所在作用域)在obj上面。注意是运行的时候,和在哪里声明的没有关系。
5173最新源码,安装vscode其他颜色主题,win ubuntu卸载,查看tomcat 多少位,爬虫技术app,php 寻路算法,春暖花开x8seo,手机 电脑 网站系统,移动网站css模板lzw
call-site and call-stack
ppframe 源码下载,vscode中js怎么转ts,Ubuntu被入侵,tomcat 编译后$1,excel变成爬虫,wrapper php,福建省seo推广知识外包,绿色农业网站模板lzw
call-site姑且理解为调用域,call-stack为调用栈。如下代码可以辅助我们理解

function baz() {  // call-stack is: `baz`  // so, our call-site is in the global scope  console.log( "baz" );  bar(); // <-- call-site for `bar`}
在baz()中调用bar(),所以bar的调用域是baz,此时bar的调用栈只有baz;而baz本身暴露在全局作用域中,所以它的调用域则也在全局作用域中。

function bar() {  // call-stack is: `baz` -> `bar`  // so, our call-site is in `baz`  console.log( "bar" );  foo(); //  `bar` -> `foo`  // so, our call-site is in `bar`  console.log( "foo" );}baz(); // <-- call-site for `baz`
理解之后再回头看开头的例子,是不是感觉清晰了很多。其实this只是指向了它的call-site

还有如下玩法:

function foo() {  console.log( this.a );}var obj2 = {  a: 42,  foo: foo};var obj1 = {  a: 2,  obj2: obj2};obj1.obj2.foo(); // 42Implicitly Lost(隐式丢失)function foo() {  console.log( this.a );}var obj = {  a: 2,  foo: foo};var bar = obj.foo; // function reference/alias!var a = "oops, global"; // `a` also property on global objectbar(); // "oops, global"
虽然bar引用了obj上的foo,但实际上相当于是直接对foo引用而已,所以会默认绑定到全局。

function foo() {  console.log( this.a );}function doFoo(fn) {  // `fn` is just another reference to `foo`  fn(); // <-- call-site!}var obj = {  a: 2,  foo: foo};var a = "oops, global"; // `a` also property on global objectdoFoo( obj.foo ); // "oops, global"

  • 暂无相关文章