将JQuery Vars / Funcs转换为Vanilla JS Vars / Funcs?

时间:2019-10-23 09:20:29

标签: javascript jquery legacy-code

我目前正在处理一些旧代码,并将所有旧的JQuery转换为Vanilla / ES6 Javascript。我遇到了一些古怪的JQuery语法,我无法对其进行清晰的解释。首先,我有一个看起来像这样的函数:

(function($) { Do something } (jQuery);

此函数与标准函数声明有什么不同吗?像这样:

const myFunc = () => ( Do something )

第二,我的代码中有一些奇怪的变量。特别是这样的:

$_some_weird_var_value = "";

美元符号有什么作用?它只是表示JQuery,但如果要将这个var转换为常规var,我将删除美元符号,对吗?命名中的下划线使我认为这是某种常数,因此也许会变成这样:

const _some_weird_var_value = "";

欢迎任何输入。谢谢!

2 个答案:

答案 0 :(得分:2)

(function($) { Do something } (jQuery);

这是IIFE(立即调用的函数)。它与jQuery无关(只是将jQuery作为参数传递给它)。

const myFunc = () => ( Do something )

那是一个箭头函数(分配给一个常数),而不是function declaration

  

美元符号有什么作用?

就JavaScript(或jQuery)而言,它只是一个允许在变量名中使用的字符。

变量$是用于保存jQuery函数的传统短变量名。

名称以$开头的变量通常用于保存jQuery对象的实例(例如$body = $("body");)。

  

命名中的下划线使我认为这是某种常数

如果首先用const声明,则为常量。您的示例未显示变量的声明(除非它是隐式全局变量,应避免使用该变量,并且在strict mode中将其禁止)。

答案 1 :(得分:2)

(function($) { Do something } (jQuery);

这只是一个普通的立即调用的函数表达式,即IIFE。例如,您可以使用它创建一个闭包,以防止在全局范围内声明变量。

最后一组括号是您从当前范围传入变量,第一组是将那些变量传递到将要执行的函数中,您可以在那里重命名,美元符号没有什么特别的。

例如,这将是有效的。

(function (foo) {
     // foo === window.jQuery
})(jQuery);

IIFE和标准函数声明之间的区别在于,IIFE内部的函数是在封闭范围(即闭包)中声明的,而标准函数声明是在其声明的范围之内声明的。

最后,以$开头的变量是jQuery的“标准”,就Java语言而言,这没有什么特别的。