首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

var self = this; 糟糕的模式?

"var self = this;" 是一种糟糕的编程模式,它通常用于解决 JavaScript 中函数作用域的问题。在早期的 JavaScript 中,函数内部的 this 关键字指向的是调用该函数的对象。然而,在某些情况下,函数内部的 this 可能会指向不正确的对象,导致代码出现 bug。

为了解决这个问题,开发者通常会在函数外部创建一个变量 self,并将 this 赋值给它。然后在函数内部,使用 self 来代替 this。这样做的目的是为了确保在函数内部使用的 this 始终指向正确的对象。

然而,这种模式存在一些问题。首先,它会导致代码变得冗长和难以理解。其次,它在处理嵌套函数时可能会出现问题,因为 self 只是一个普通的变量,它的值可能会被修改或覆盖。

为了避免使用这种糟糕的模式,可以使用箭头函数来替代传统的函数声明。箭头函数不会改变 this 的指向,它会继承外部作用域的 this 值。这样可以更加简洁和清晰地编写代码,避免出现 this 指向错误的问题。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

API管理中5种最糟糕模式

模式 2:本末倒置 另一个有趣模式是过度关注长期、可能是理想化结果,而没有认识到或理解实现这些结果步骤。你 API 转型项目非常昂贵,你希望确保一切顺利运行。...反模式 3:足够好代码 作为现代平台工程主管,您坚信基础设施即代码 (IaC)。在声明性配置文件中管理和配置您资源是一种现代且出色设计模式,可以降低成本和风险。...反模式 4:混乱版本控制系统 在开始 API 之旅时,很难计划和预测每个用例。变化是不可避免,但如何管理变化却不是。正如我们将在本节中看到那样,糟糕变更管理影响会随着时间推移而累积。...在经历了糟糕无版本控制策略事件后,您很欣慰地看到版本控制策略在 DonutGPT 每一部分代码中都得到了强制执行。您甚至开始睡得更香了,但如果您读到这里,您就知道这不可能持续下去。...换句话说,https://donutgpt.com/v1/donuts 和 https://donutgpt.com/v2/donuts 能够调用同一版本服务,这导致了类似于无版本策略事件情况,造成了糟糕客户体验

8110

糟糕策略梯度

对于各种强化学习问题,人们第一个想到通用解决方案就是策略梯度(Policy Gradient)。不过让我震惊是 1993 年时候人们并没有把策略梯度看作一个糟糕方法并且弃之不用。...这里,我们就来到了策略梯度中第一个逻辑跳跃地方了。相比于对所有可能分布构成空间做优化,我们优化是一组参数分布 p(u;ϑ)。...我们还需要看到,当我们在动态系统中考虑这些因素时候情况只会变得更糟糕。线性二次调节器策略梯度更新里会含有非常多噪声,而且它方差会随着模拟步数 L 增大。...尤其当你看到另外一批论文里基因算法和你算法得到了近似的成果时候,你需要明白这并不代表着基因算法有了新发展,它更可能是在告诉你,你方法只不过是随机搜索一次糟糕实现而已。...策略梯度和强化学习并没有什么神奇魔力,我想我已经强调得够多了。不过我还是要继续说,策略梯度和它各种变体真的是糟糕得很合理算法。想让它们顺利运行得出结果需要很多技巧。

1.1K50

糟糕 Kotlin 语法糖

这几天在 review 同事代码时候,发现一块有意思代码,我将其写成对应伪代码如下: class UserViewModel(val userUsecase: UserUsecase) {...,觉得十分反人类,在 Kotlin 中,对象初始化可以省略 new 操作符,也即类后面再配个 () 即可,为啥一个初始化对象还能继续用 (),在直观感受下,我以为是初始化了一个对象,唯一让我觉得不像是初始化就是...在我想点进去看下根据 userId 获取 User 过程,我无论追踪代码,都无法跳转到真正逻辑代码调用处,点击 userUsecase 会直接跳转到 UserViewModel 构造方法,点击 name...上面的示例给已足够简单,但实际在我们业务中,比这还复杂,invoke 函数被封装到了父类,当我点进去时候根本找不到 invoke 函数,只能往上查看父类有没有,在找到 invoke 函数时才发现,...我也很理解大家对 Jetpack 热爱,这种写法在官方也有出现,可以参考 Domain Layer 这章。但我想说是,省略方法名这个过程真的有必要吗?

63221

糟糕程序员面试

“谷歌式”面试真心是让人又爱又恨,它糟糕透了:好应聘者落选,坏应聘者背背答案就能通过,呵呵。 这是真的。 但是,这也是真的:所有的面试过程都很糟糕。 ?...但这并不意味着他们就一定是糟糕编码人员。稍微培训一下就可以改善他们编码风格。 这种方法很难识别智力/解决问题能力。 最佳做法: 可以看看他们代码,但是要有保留地接受对代码风格解释。...如果一个程序员标榜自己是特定编程语言使用者,那么他解决问题能力通常更弱。所以这是一个糟糕属性。优秀开发人员不太愿意将自己定性为“Java开发者”或“PHP开发人员”,更愿意自称是开发人员。...有些技能是很难掌握,即使那人真的很聪明。 都是糟糕面试,那有没有不糟糕? 上面讲述所有的面试方法都有问题。是的,没错,都有问题。...但是,都很糟糕,都有问题。 那么……你能做什么? 接受一点:任何面试方法都是有缺陷,都是糟糕。 所以,我们需要找出最不那么糟糕一种。然后好好实现。

29220

【题解】糟糕一天

定义 图片 为第i头牛所能看到别的牛头发数量。...Since each cow is self-conscious about her messy hairstyle, FJ wants to count the number of other cows...样例 #1 样例输入 #1 6 10 3 7 4 12 2 样例输出 #1 5 题目分析 仔细阅读题目,题目要求没头牛能看到数量总和。分析下样例。...看起来只要从后往前扫,求出比h[i]小数即可。但是这样做存在一个问题,该问题在样例中也有体现,即会出现“遮挡”情况,比如样例中2会被12给遮挡。而如果加入“遮挡”计算起来会过于复杂。...此时可以更换一个思路,从原来统计比h[i]小、且未被遮挡元素个数改为统计能未遮挡看到h[i]元素个数。 更换思路之后,问题就变成了统计1∼i−1范围内未遮挡单调减元素个数。

37710

PHP 是最糟糕编程语言?

这门语言确实有很多不好地方。搁在以前,这门语言还有更多糟糕问题。...像 Laminas 和 Symfony 这样框架就使用了面向对象编程最佳实践,使开发者可以用这些框架编写结构正确代码。 PHP 是怎么做到这些?这是因为 PHP 是最糟糕编程语言。...PHP 很简单 设计一定要简单,不论是它实现还是接口。 PHP 底层使用了 C 语言,我们之前已经说过,这部分是“最糟糕”。...Gabriel 承认,“更糟就是更好”哲学指的是设计看起来很糟糕,也许不应该作为更好选择。...下次再听到有人骂 PHP 时候,就随他喷去吧。这门语言确实很糟糕。但从许多方面来看,PHP 长寿和广泛使用证明了这样一个事实:用“正确方式”做事并不总是比用“最糟糕方式做事好。

1.7K20

请停止编写糟糕提交消息!

他们试图理解你所做更改细节,但是由于你提交消息不是描述性,因此他们无法获取任何信息。 然后,他们尝试去查看每个提交差异。但是,即使这样做了,他们仍然无法确定你在实现中选择背后思考过程。...理想情况下,良好提交消息将被分为三部分:主题,正文和结尾。 主题 主题应该是简洁一行,总结你所提交更改。 下面例举一个很好提交信息,例如“feature:查询项目应用率功能”。...一个错误提交消息,例如“fix bug”,在其他人看到这条提交信息时候就会不知所措。 正文 正文包含你要传达信息,你可以在其中详细了解有关更改信息。...请注意,对于一些很小提交,例如修正错字,你可能不需要正文,因为主题行应该足够有信息性。 在正文中,你应该深入了解正在进行更改,并说明正在执行操作前因后果。...你可以解释为什么要进行这些更改,为什么要选择以这种特定方式实施更改以及可以帮助人们理解你提交背后思维过程其他任何原因。

52720

var、let、const区别

var 学过JavaScript都很熟悉,用来声明一个变量。 let、const 是ECMAScript 6中新增命令。...(x); // expected output: 2 作用域: 用 var 声明变量作用域是它当前执行上下文,它可以是嵌套函数,或者对于声明在任何函数外变量来说是全局。...它用法类似于var,但是所声明变量,只在 let 命令所在代码块内有效。...然后在代码块之外调用这两个变量,结果let声明变量报错,var声明变量返回了正确值。这表明,let声明变量只在它所在代码块有效。 for循环计数器,就很合适使用let命令。...// var 情况 console.log(foo); // 输出undefined var foo = 2; // let 情况 console.log(bar); // 报错ReferenceError

59021

var和letconst区别

let和 const是 ES6 新增命令,用于声明变量,这两个命令跟 ES5 var有许多不同,并且 let和 const也有一些细微不同,再认真阅读了阮一峰老师文档后,发现还是有一些不知道细节...本文中提到链接,因为微信限制,没有显示出来,查看文中链接,需要点击最下方阅读原文链接 博客、前端积累文档、公众号、GitHub 内容: var和 let/ const区别 块级作用域 不存在变量提升.../ 想打印外层时间作用域 if (false) { var tmp = 'hello world'; // 这里声明作用域为整个函数 } } f(); // undefined var...undefined ES5 时使用 var声明变量,经常会出现变量提升现象。...// var 情况 console.log(foo); // 输出undefined var foo = 2; // let 情况 console.log(bar); // 报错ReferenceError

37410

let 与 var 区别

bug收集:专门解决与收集bug网站 网址:www.bugshouji.com 01 声明后未赋值,表现相同 let、var申明变量未赋值,都输出undefined....console.log(letTest); //输出undefined }()); 02 使用未声明变量,表现不同 使用var申明变量,会进行提升,而let申明变量,则不会提升 所以,有如下结果...'; }()); 03 重复声明同一个变量时,表现不同 var可以重复申明相同变量,后面的会覆盖前面的 let不可以重复申明相同变量,会报错,变量已经存在 'use strict'; (function...(注意要注释掉上面letTest变量重复声明才能运行) console.log(letTest); }()); 04 变量作用范围,表现不同 var只全局变量与局部变量之分,没有块级作用域 let...,内部"{}"中声明letTest和外部letTest不是同一个变量 }()); 05 经典例子 使用 var 定义变量 i ,循环体中使用 setTimeout 输出 i , 代码如下: for(

46320

《赢》第18章 糟糕老板

第18章 糟糕老板 不管遇到多么糟糕老板,你都不能让自己表现为一名受害者 一般说来,老板们对于他们所喜欢、尊重和需要的人态度并不差 你必须要找他谈,因为没有其他途径可以绕过去。...记住,你目标只是找出那些你老板基于某种原因而没有公开告诉过你东西。也许他对你有抵触,也许他只是太忙。无论如何,你目标是找到他对你态度和业绩疑问 ?...类型1老板,你希望褒奖和提升他们,并且希望他们成为公司其他人榜样 类型2:他们必须走人,越快越好,实际情况也是如此 类型3:他们真正信仰公司价值观,也在尽力付诸实践,但他们并没有良好业绩。...这些人可以得到培训和指导,在公司其他部门给他们一两次新机会 类型4:处理起来最为棘手。他们通常可以在自己位置上待很长时间,尽管举止不那么友善,却有出色业绩。...在你等待时候 ,则应该继续努力,为工作贡献自己所能 在你开始自己下一份工作时,要记住原来老板为什么让你讨厌,你对他感受如何——有朝一日当你成为老板,就要引以为戒

52110

我见过糟糕程序代码

这事发生在很多年前,在一个相当大公司里,公司名我就不说了。那个软件有一大堆程序,是一个商业系统核心模块,由一个、单独一个小伙维护着,这个家伙不久前被炒了。...程序员代码里通常体现着自己对幽默理解以及对‘工作保密’这个词认识。...这个家伙留下来软件里没有任何逻辑炸弹或下流阴谋,编译很正常,除了有一个bug外,一切都工作很好。但是,你需要想像一下:程序中所有函数、变量名都是以食物命名。...一点一点,我把这些函数名和变量名改成具有意义命名,开始很麻烦,之后慢慢变得容易些。...当然,如果你脑子里还在想:你不能因为我变量名没有什么意义就把我开除了(或应该招我回来改程序),那你是在妄想,不管这个家伙用意是什么,他做法十分错误(我很难想象他前任老板还会推荐他),不管怎样

65050

Python要self理由

Python要self理由 Python方法和普通函数有一个很明显区别,在类方法必须有个额外第一个参数 (self ),但在调用这个方法时候不必为这个参数赋值 (显胜于隐 引发)。...Python方法这个特别的参数指代是对象本身,而按照Python惯例,它用self来表示。...self代表当前对象地址。self能避免非限定调用造成全局变量。 在Python3之后不知道将self隐了没?...感觉在Python类里方法都要带个self这样有点死板 首先明确self只有在类方法中才会有,独立函数或方法是不必带有self。...self在定义类方法时是必须有的,虽然在调用时不必传入相应参数。

37910
领券