我开始研究Javascript和JQuery(因此我选择下面的例子)。我发现我可以定义一个函数并调用它(如预期的那样),但我也可以...... 做其他事情 ..这就是问题:
$scope.delivery_items[v.item_category_id]['items'].push(val);
我没有使用函数调用或只是在不调用函数的情况下声明'$'时出错。后者到底在做什么?如果它实际上没有调用函数,为什么它可以工作?
答案 0 :(得分:10)
它什么都不做。它只是一个碰巧持有函数的变量。
它与以下同样无用的代码没有什么不同:
42;
答案 1 :(得分:3)
JavaScript对象是键和值之间的映射。钥匙是 字符串和值可以是任何东西。这使得物体自然适合 用于哈希映射。
函数是具有附加功能的常规对象 调用。
这意味着您可以执行以下操作:
function test(){
console.log(1);
}
var a = test;
a();
或
var test2 = function(){
console.log(2);
}
或autocall
//sorry for the indentation.
(
function(){
console.log(3);
}
)()
或创建结构
var testHash = {
a : 1,
b : function(){
console.log(4);
}
}
testHash.b();
testHash['b']();
创建难以调用的函数:
//in a browser environment
window['test3'] = function(){
console.log(5);
}
window['test space'] = function(){
console.log(6);
}
test3() //no error
test space() //error :D
编辑:用户想要了解有关自动调用功能的更多信息:
为什么这样做?
(
function(){
console.log(3);
}
)()
通过两个步骤轻松完成:
括号,如果我们知道函数与其他变量一样,并且我们知道括号仅用于制作组或调用函数。
var test_1 = 'string example';
var length = (test_1).length; // the same that test_1.length
有道理:
var test_1 = 'string';
var test_2 = ' example';
var length = (test_1 + test_2).length; // the same that test_1.length
而不是:
var test_1 = 'string';
var test_2 = ' example';
var aux = test_1 + test_2;
var length = aux.length; // the same that test_1.length
现在,这对你有意义吗?:
var length = ('string example').length; // instead the first example
第二步,我们可以更改函数的字符串..并将其命名为
( function(){ ... } )()
为什么这很有趣? 那么,现在出现了封闭的概念。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
闭包是javascript中非常重要的工具。
答案 2 :(得分:1)
名称“$”只是该功能的持有者,通过“$”行,它只是列出代码的内容(在Google Chrome的开发者工具中)。
$()是调用函数。
$表示它持有什么。