Javascript方法声明
这样声明一个方法正确吗Javascript方法声明,javascript,Javascript,这样声明一个方法正确吗 window['TEST']['myfunction?'] = function(param) { for(var a in([ param.getElementsByTagName('ol'), param.getElementsByTagName('ul') ]){ found += a.length(); } return a != 0 ? true : false; } 我总
window['TEST']['myfunction?'] = function(param) {
for(var a in([ param.getElementsByTagName('ol'), param.getElementsByTagName('ul') ]){
found += a.length();
}
return a != 0
? true
: false;
}
我总是这样声明方法
var TEST = function(param){
...
}
但是我在一些代码中看到了第一个声明。但我没办法做到。这两种声明的区别是什么。哪一个更有效?
窗口['TEST']['myfunction?']=
获取全局对象,获取存储在其TEST
属性中的对象,然后将函数分配给其myfunction?
属性
通常最好避免使用带有奇数字符的全局名称和属性名称(如?
)
var TEST=
声明一个局部作用域变量(TEST
),并为其赋值。因为它不是对象的属性,所以它不是方法。括号表示法和点表示法可以互换。据我所知,它们的执行速度大致相同。括号表示法允许您使用点表示法中非法的字符
// eg
var myObject = {}
myObject["var1"] = 1; // bracket notation same as dot notation
myObject.var1 = 1; // dot notation same as bracket notation
myObject["test-me"] = 2; // valid creation of property test-me
myObject.test-me = 2; // will throw an error as "-" is an operator.
// the invalid character will force you to use bracket notion whenever you access the property.
其他人可以回答第二部分。在Javascript中,几乎所有东西都是一个对象,这意味着所有东西都有一组特定的属性。您可以通过几种方式访问或设置这些属性,其中两种方式与此相关 第一个选项是
window.foo='bar'代码>。另一种编写方法是window['foo']='bar'第一种称为点表示法,第二种称为括号表示法。括号表示法比点表示法有一个优点,点表示法是可以使用的字符类型。例如window.invalid-foo='bar'
将不起作用<另一方面,代码>窗口['invalid-foo']
现在来回答你的问题;当遇到window['TEST']['myFunction?']
时,代码的原始作者可能有自己的框架来检查全局window.TEST
对象的函数。迭代这些函数并调用它们作为测试代码的方法
我不建议这样做,因为:
使用非标准的方法声明变量会造成不必要的混乱
一种声明函数的方法比另一种更快吗?后者的速度要快一点,我们说的是每秒200万次,而不是每秒15亿次
第一次声明不正确。1.全球2。使用函数名中的?
,这里有两个完全无关的问题。请挑一个问一下。我实际上不知道第一次宣布的语法。我只是把它放在某个地方。我想知道第一个宣告语法。有什么联系吗?@Quentin我已经改变了。那么现在我可以知道这个问题了吗?我只是不知道为什么这个问题被标记为否定?这是一个简单的语法问题,那么问题出在哪里呢。投票反对的人也必须对此进行评论好的,所以如果我想用参数调用声明为第一种类型(全局)的方法,那么语法应该是什么Test.myfunction?(param)
窗口['Test']['myfunction?'](param)
var-Test
放置在函数外部的将是全局范围。变量范围取决于您声明变量的位置。在函数内部,它的作用域是函数,在外部,它是全局的。不包括var
标记,它始终是全局的<代码>测试=0如果尚未声明,则代码>始终是全局的。在严格模式下不允许“使用严格”
谢谢,用window[]声明它怎么样,我想这会使它成为全局的?window是大多数浏览器环境的默认全局范围。很好的解释。但是如果我给出了问题中的名称,那么如何调用这个方法呢?如果我尝试TEST.myFunction?(param)
,那么会出现错误?是的,因为在使用点表示法时不能使用特殊字符。例如,解释器不可能正确解释var a=test?1:2和变量a=测试?()?1 : 2;代码>。这对我很有帮助。谢谢