[沫沫金]JS匿名函数this调用变量报错

背景

今天使用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://blog.51cto.com/zl0828/2402896

时间: 2024-10-07 12:27:33

[沫沫金]JS匿名函数this调用变量报错的相关文章

JS里面匿名函数的调用 &amp; 变量作用域的实验

参考 http://www.educity.cn/wenda/54753.html 已实验验证结果正确. 1.下列哪些正确?(B.C) A.function(){ alert("Here!"); }(); B.(function(){ alert("Here!"); })(); C.(function(){ alert("Here!"); }()); 下面也已经实验验证结果正确. 2.下列哪个结果是正确的?(A.B.C.D) A.(functio

JS匿名函数之调用

何为匿名函数 很多东西我们可以通过字面就可以理解,当然也不是所有的都可以通过字面能理解的,因为程序语言毕竟是个很抽象的东西,光从字面理解肯定不够也不行,但是匿名函数就可以.所谓匿名函数就是没有名称的函数,例如下面这种: function (b) { a=1; c=a+b; return c; } 上面很简单,就是在我们定义一个函数的时候,我们并没有给它一个名称,这就是我们的匿名函数! 但是问题来了,匿名函数如何调用呢,我们都知道有名称的函数调用方式,例如: function jiujiu(b)

JS匿名函数声明,调用;JS闭包详解(转载)

js匿名函数的代码如下:(function(){ // 这里忽略jQuery 所有实现 })(); 半年前初次接触jQuery 的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我就迷糊了.为什么只有一个匿名函数又没看到运行(当然是运行了…… ),就能有jQuery 这么个函数库了?于是,我抱着疑问来到CSDN .结果相信现在很多人都很清楚了(因为在我之 后也不乏来者,呵呵~ ).当一个匿名函数被括起来,然后再在后面加一个括号,这个匿名函数就能立即运行起来!真神奇哦

js匿名函数闭包

函数声明: function functionName(arg0,arg1){ //函数体 } 函数表达式: var functionName = function(arg0,arg1){ //函数体 } 函数声明和函数表达式之间的主要区别是前者会在代码执行前被加载到作用域中,而后者是在代码执行到那一行的时候才会有定义.另一个区别是函数声明会给函数指定一个名字,而函数表达式则创建一个匿名函数,然后将这个函数赋给一个变量 1 递归 递归函数是在一个函数通过名字调用自身的情况下构成的,例如: fun

js匿名函数

一. 匿名函数的声明和使用1.声明一个匿名函数,直接赋值给某一个事件:2.使用匿名函数表达式.将匿名函数,赋值给一个变量.声明:var func=function(){  }调用:func(); 注意:使用匿名函数表达式时,函数的调用语句,必须放在函数声明语句之后!!!(与普通函数的区别)[js代码的执行顺序问题]js代码在运行时,会分为两大部分.检查装载和执行阶段.检查装载阶段:会先检测代码的语法错误,进行变量.函数的声明执行阶段:变量的赋值.函数的调用等,都属于执行阶段.以下代码为例: 原因

js匿名函数确实是个好东西

<body > <script type="text/javascript"> void function() { alert('弹出框'); }(); </script> </body> <body > <script type="text/javascript"> void function() { alert('弹出框'); }(); </script> </body&g

272 函数的理解和使用:回调函数,匿名函数自调用IIFE,**函数中的this**

什么是函数? 用来实现特定功能的, n条语句的封装体 只有函数类型的数据是可以执行的, 其它的都不可以 为什么要用函数? 提高复用性 便于阅读交流 函数也是对象 instanceof Object===true 函数有属性: prototype 函数有方法: call()/apply() 可以添加新的属性/方法 函数的3种不同角色 一般函数 : 直接调用 构造函数 : 通过new调用 对象 : 通过.调用内部的属性/方法 函数中的this 显式指定谁: obj.xxx() 通过call/appl

javascript匿名函数自调用

// 匿名函数的自调用 /*var f1 = function() { console.log('我是一个匿名函数!'); }*/ // f1(); // 上面是定义一个匿名函数,然后调用,其实上面就是变量名,然后使用()来调用 // 这样会报错,原因是因为函数体的的大括号分开了,解释不了,可以使用小扩号来调优先级 /*function f2(){ console.log('是我是一个匿名函数,并且是自调用!'); }();*/ (function f3(name){ console.log('

js匿名函数及闭包(javaScript高级程序设计第3版)

一.匿名函数 //普通函数 function box() { //函数名是box return 'Lee'; } //匿名函数 function () { //匿名函数,会报错 return 'Lee'; } //通过表达式自我执行 (function box() { //封装成表达式 alert('Lee'); })(); //()表示执行函数,并且传参 //把匿名函数赋值给变量 var box = function () { //将匿名函数赋给变量 return 'Lee'; }; aler