【问题标题】:Can i define functions in a loop statement? [closed]我可以在循环语句中定义函数吗? [关闭]
【发布时间】:2014-03-30 23:11:37
【问题描述】:

我在 javascript 中使用如下代码。错了吗?

for(i=0;i<5;i++){

function somefunction(){
/*function code here*/
}

somefunction();//call that function inside the loop
}//end of for loop

我想我用这个写了一个代码,我把一切都搞砸了。

【问题讨论】:

  • 第一个问题:为什么需要在循环内部定义它?另外,您是否尝试在循环之外访问它?
  • 我不确定,但使用匿名函数 (var someFunction=function(){/*function code here*/}) 应该可以工作
  • 你可以,但是为什么你想这样做? i 的值出乎您的意料,您的搞砸了吗?
  • 根据规范,函数声明不能放在循环或条件语句中。浏览器可能仍然可以容忍它,但它可能会导致意外行为。那是因为函数声明是提升的。改用函数表达式应该没问题。
  • 严格模式下是不允许的。

标签: javascript function loops for-loop call


【解决方案1】:

JavaScript 中的函数和变量的作用域是最近的函数,而不是最近的 ({ ... })。

所以你不能每次都在循环中定义不同的函数或变量,因为你在相同的范围内覆盖了相同的名称。

因此,将这样的声明放入循环中是个坏主意,无论标准或实现是否允许您这样做,因为它只会误导任何阅读代码的人(很可能是您自己! )。

您可以在循环内创建一个 匿名 函数,但如果没有更多上下文,我无法真正举例说明这对您有何帮助。

【讨论】:

  • 这是真的,但这只是因为浏览器已经扩展了语言(并不总是兼容的方式)。 “严格”模式下不允许这种做法。
  • @Pointy 你指的是什么?我只提到您不能定义两个具有相同名称的函数(无论浏览器或严格性如何),并且您可以创建一个匿名函数(无论浏览器或严格)。
  • @Pointy 我添加了一个句子,澄清我认为语法的合法性无关紧要,因为无论如何实践都是错误的。
  • 是的,你的回答很好:) 为了完整性,我刚刚添加了关于“严格”模式的评论。
猜你喜欢
  • 2020-03-26
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 2014-03-14
相关资源
最近更新 更多