我目前正在处理一些旧代码,并将所有旧的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 = "";
欢迎任何输入。谢谢!
答案 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语言而言,这没有什么特别的。