- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
假设我有这样的功能:
function foo() {
}
function bar() {
}
我可以把上面写成对象字面量符号:
var Baz = {
foo: function() {
},
bar: function() {
}
};
据我所知,在后一种情况下,无论是否调用任何 Baz 函数,脚本加载时都会创建一个 Baz 实例。在前一种情况下,函数对象仅在调用该函数时创建。我对这些假设是否正确?
如果我是正确的,那么在很少调用这些函数的应用程序中,前者将比后者具有更高的性能(更少的内存)。但后者的优势在于它提供了更大的模块化和更低的全局命名空间污染。
根据您的专业经验,您对此有何看法?有速度差异吗?
最佳答案
In the former case, function object is only created when that function is called.
不,无论如何都会创建函数。
请注意,您也可以这样做:
function foo() {
}
function bar() {
}
var Baz = {
foo: foo,
bar: bar
};
或者这个:
var Baz = (function() {
function foo() {
}
function bar() {
}
return {
foo: foo,
bar: bar
};
})();
将函数作为属性放在 Baz
上的主要目的是使它们在 Baz
上作为“方法”可用。这可能是为了方便,用于“命名空间”等。在您的第一种形式(以及我上面的第一种形式)中,如果该代码在全局范围内, foo
和 bar
被添加到全局范围,它会很快变得非常拥挤(尤其是在浏览器上)。在您的第二个示例中,唯一的全局符号是 Baz
因为函数是匿名的。在我上面的最后一个例子中,唯一的全局符号是 Baz
但函数不是匿名的,它们有调试器和堆栈跟踪可以显示给你的名字(这是一个很好的东西; more here ).
就在函数创建时进行优化而言,它是这样工作的:当执行进入给定的上下文(全局上下文,或与调用函数相关的上下文)时,这些东西是完成:
arguments
的变量对象中添加了一个属性(可用于访问参数的类似数组的东西)var
声明的变量在变量对象上创建属性;它们的值最初是 undefined
(不管 var
是否有初始化器)。var
语句(例如,var a = 2;
)被视为与赋值语句(a = 2;
)完全相同;它的 var
方面很早就完成了。 (var
是 frequently misunderstood。例如,我们昨天有 this question。)您会注意到函数声明 和函数表达式 之间的区别。您可以通过查看您是否将结果用作右手值来判断哪个是哪个 - 也就是说,您是否将结果分配给变量,将其用作右侧对象文字中的属性定义,或将其传递给函数。如果是,它就是一个函数表达式。如果不是,它是一个函数声明。
函数声明示例:
function foo() {
}
函数表达式示例:
var foo = function() {
};
另一个:
var Baz = {
foo: function() { }
};
(foo
行是对象文字中的属性声明,它使用函数表达式作为值。)
命名函数表达式示例:
var f = function foo() { // <== Don't do this (more below)
};
命名函数表达式应该是有效的,但它们在野外实现(尤其是 IE)的支持很差,所以现在必须避免使用它们。 More here .
关于JavaScript 对象文字符号与普通函数和性能影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5754538/
给定一个字符串,例如 s="##$$$#",我如何找到索引之前的“#”符号数等于“”数的索引$"符号在索引之后? 示例:如果 s="##$$$#",则输出将为 2。 解释:在索引 2 之前我们有 2
在本教程中,您将借助示例了解 JavaScript 符号。 JavaScript 符号 JavaScript ES6 引入了一种新的原始数据类型,称为 Symbol(符号)。符号是不可变的(不能更改)
在“函数编程的工艺”一书中,符号 '>.>' 将函数连接在一起,与 '.' 的方向相反。但是当我使用 ghci 实现它时,它显示了超出范围的错误 '>.>'。为什么?它是不再使用的旧符号吗? 最佳答案
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我需要从向量中删除 \"。这是我的数据: data <- c("\"https://click.linksynergy.com/link?id=RUxZriH*PWc&offerid=323058.1
我在 Nginx 配置中使用正则表达式来捕获文件 URL,但如果文件 URL 包含 # 符号,正则表达式模式将不会捕获它。 这里是nginx的配置部分。 location ~ ^/p/(?[\w\-=
如何使 & 符号在此图表的第一组条形/列下正确显示: http://jsfiddle.net/VxbrK/2/ 应该是“Apples & Oranges”而不是“Apples & Oranges”。
**在verilog中是什么意思? 我为测试台提供了以下逻辑 localparam NUM_INPUT_BITS = 1; localparam NUM_OUTPUT_BITS
我有一个使用正则表达式来验证电子邮件地址的方法。 public String searchFormail(String searchWord) { Pattern pattern = Patt
我想将一个字符串拆分为数字部分和文本/符号部分我当前的代码不包含负数或小数,并且表现得很奇怪,在输出的末尾添加了一个空列表元素 import re mystring = 'AD%5(6ag 0.33-
我有一些代码需要从数组中选择一个随机字符串,但它一直返回单个字母或数字。如何解决这个问题? var name = ["Yayek", "Vozarut", "Gezex",
我刚开始使用 Python,我在考虑应该使用哪种表示法。我读过 PEP 8关于 Python 符号的指南,我同意那里的大多数内容,除了函数名称(我更喜欢混合大小写风格)。 在 C++ 中,我使用匈牙利
在用 C# 编写代码时,我错误地在 if 语句中的变量前添加了一个符号(而不是感叹号)。 bool b = false; if (@b) { } 我很惊讶它编译成功,没有任何错误。 我想知道:上面的代
本文实例为大家分享了特殊字符替换电话号码中某一部分的方法,ios利用-号替换电话号码中间四位,供大家参考,具体内容如下 1、效果图 2、代码 rootviewcontroll
当我使用“x”和“z”作为符号时,这段代码没有问题: from sympy import * x, z = symbols('x z') y = -6*x**2 + 2*x*z**0.5 + 50*x
我需要从文本中删除标点符号: data <- "Type the command AT&W enter. in order to save the new protocol on modem;"
我有几个数字是 numeric 类。下面的例子。 df = c(12974,12412,124124,124124,34543,4576547,32235) 现在我想在每个数字前添加 '$' 符号而不
我有一个 highcharts 图例,其中符号以不同的大小显示,因为它们在实际图表中的大小不同。不幸的是,当数据点的大小增加时,它们也会在图例中增加。无论数据点大小如何,我都希望图例符号保持相同的大小
我需要使用包含平均值+-SD的标题。到目前为止,我只能得到以下信息: "Mean +- SD or N (%)" [1] "Mean +- SD or N (%)" 如何直接使用“+-”符号?您知道一
使用 XSLT 和 XPath 1.0,我有一个要转义的字符串以用于 URL,例如: one word & another 因此,描述元素的 text() 应该进行 URL 转义。 我该怎么做
我是一名优秀的程序员,十分优秀!