JS匿名函数this调用变量报错

更新日期: 2019-05-30阅读: 2.3k标签: 匿名函数

背景

今天使用Dcloud扫码功能,success成功方法设置data中的scanContext变量,报“undefined”!


思路

一、怀疑是扫码内容不是JSON对象,无法点属性报错。排除,使用JSON.parse转换成功后,依然报“undefined”。
二、怎么就“undefined”呢,百思不得其解。继续想办法


解决

突然,看到附件选择的方法,人家是设置的this.fileUrl成功的。比对下,什么区别。发现定义的匿名方法,写法不同。我的是function(res),人家的是(res) =>箭头。考下去试试,

成功了!!!


原因

这就是JS中匿名方法的this指向问题,function的声明方式,this指向的是本身,父级的变量都无法访问。请阅读下面的源码,运行会报错吗?

<script type="text/javascript">
var num = 100;
var thah={
success:function(){
alert(this.num);
}
}
thah.success();
</script>


扩展

请熟悉的朋友跟我一起读:var that = this;//大法好
更时尚的是箭头声明 success:(res)=>{} 更时尚、更流行、高大上。

以上,是关于JS匿名函数this的指向问题。踩过的坑,一起欢呼。


原文地址:https://www.cnblogs.com/binghuaZhang/p/10950816.html 

 

链接: https://fly63.com/article/detial/3493

js中函数声明、函数表达式、匿名函数的理解和区别?

js和其他编程语言相对比较随意,首先来理解下函数基本概念:函数声明、函数表达式、匿名函数。函数声明和函数表达式区别有哪些?

少用JS匿名函数_不使用JS匿名函数的三个理由

无论你在什么时候读代码,您都必须注意到匿名函数。有时它们被称为 lambda,有时是匿名函数,不管怎样,我认为他们是不好使用的。匿名函数是一种在运行时动态声明的函数。它们之所以被称为匿名函数是因为不同于普通函数,它们并没有函数名 。

js匿名函数自执行的好处

我们知道,在创建一个函数时如果要用到变量来存取信息的话,要尽量使用局部变量。因为一方面局部变量会随着函数的执行结束被销毁;另一方面在不执行函数的时候也不会创建这个局部变量,对节省空间资源有很大的好处。

什么是匿名函数、什么是闭包函数?

在前端面试中面试官基本都会问到什么是匿名函数、什么是闭包函数。匿名函数顾名思义就是没有名字的函数,通常我们所写的函数都是这样的:

JavaScript中的匿名函数、立即执行函数和闭包

立即执行函数是基于匿名函数实现的,也没有函数名,会在定义后立即执行;闭包是有权访问另一个函数作用域中的变量的函数。匿名函数、立即执行函数只要满足 有权访问另一个函数作用域中的变量 这一个条件,就成了闭包。

匿名函数没有自己的this

匿名函数没有自己的this,因此,在构造对象中调用全局函数时,可以省去保存临时this,再将其传入全局函数这一步:

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!