条件语句中的Javascript执行

条件语句中的Javascript执行,javascript,function,if-statement,v8,Javascript,Function,If Statement,V8,window.onresize=window.onload=function(){ 如果(窗内宽度479时触发,并且由于某种原因,您的宽度同时小于480(例如,设备上的方向改变),您的分配将不会发生 正如我在下面的评论中指出的,您可以像这样测试解析和执行性能: <script> var startTime = new Date().getTime(); </script> // your stuff <script> console.log(ne

window.onresize=window.onload=function(){
如果(窗内宽度<480){
document.getElementById('alert')。onclick=function(){
警报('=480');
};
//大量代码
}
}

警报
是所有代码都将被解析

不,并非所有代码都将被处理/执行

你所做的是有条件的作业。加载和调整大小时

表示如果函数调用加载/调整大小时条件为true/false,则onclick属性将相应地设置/覆盖

赋值和声明之间有区别

任务:

assigned = function(){ console.log("blabla") }
声明:

function declared(){ console.log("blablabla")}
函数声明将是(您所描述的“在实际执行之前解析并存储到内存中”),因此:

您询问性能,因此实际问题取决于您描述的“大量代码”。如果你不是说中间有1mb的js代码和大量的函数声明。。。别担心

另外,请注意,永远不要尝试用alert()调试js 因为它将停止所有执行,除非您与弹出窗口交互。这意味着,如果您的警报在宽度>479时触发,并且由于某种原因,您的宽度同时小于480(例如,设备上的方向改变),您的分配将不会发生

正如我在下面的评论中指出的,您可以像这样测试解析和执行性能:

<script>
  var startTime = new Date().getTime();
</script>

// your stuff 

<script>
  console.log(new Date().getTime() - startTime)
</script>

var startTime=new Date().getTime();
//你的东西
console.log(新日期().getTime()-startTime)

JS引擎的性能对于同步调用和异步调用都不同。如果是ansync,是的,它会更快,并且只在满足任何条件时调用,否则它会被忽略,但是代码应该具有逻辑/条件,这样就不会发生任何运行时js错误。 示例-瓶颈或同时触发响应相互依赖的两个异步调用

短- 同步代码按顺序执行–每个语句在执行前等待上一个语句完成。异步代码不必等待–您的程序可以继续运行


这完全取决于需求/解决方案。如果JS use中使用了许多异步调用-

所有代码都肯定是由引擎解析的,比如说,如果块中有编译错误,它可能不会执行,但仍会抛出错误。但它会执行该块中的任何代码,因此,如果有任何局部变量或函数在那里定义,你可能无法在其他部分使用它们,是的,它将不会在内存中,因为它永远不会被执行

因此,即使在块中有大量代码或任何未执行的无限循环(如第一个
if
块),性能也不会有任何差异。唯一的问题是,如果您是从网络上的网页提供服务,那么由于文件大小(如果文件太大),您可能会得到差异。 您可以通过从chrome dev tools或firebug调试代码来检查这一点。只需在第一个代码块中放置一个调试点,然后您就可以观察它了。

您要求的

这是为了了解在初始条件方面是否有任何优势 如果mobile的代码为,则窗口加载时处理的代码量 在这样的条件语句中,它相当大

我会添加一个无限循环并运行它,以查看是否有效果,如下所示:

window.onresize = window.onload = function(){
  if(window.innerWidth < 480){
    while(true){
        console.log("abc");
    }
    //large amounts of code
  }
  if(window.innerWidth >= 480){
    document.getElementById('alert').onclick = function(){
      alert('>=480');
    };
    //large amounts of code
  }
}
window.onresize=window.onload=function(){
如果(窗内宽度<480){
while(true){
控制台日志(“abc”);
}
//大量代码
}
如果(window.innerWidth>=480){
document.getElementById('alert')。onclick=function(){
警报('>=480');
};
//大量代码
}
}

有趣的是,我昨天刚刚读了一篇关于这方面的文章……让我看看是否能再次找到它。但从我记忆中可以看出,是的-处理器将处理所有事情,而不考虑任何条件语句。(这也是为什么您可以在声明函数之前调用函数-关键字“提升”)希望我能再次找到链接来确认这个假设…@Connum:function表达式(
document.getElementById('alert')。onclick=function(){…}
)未被提升。请参阅:谢谢提醒!@Connum:不用担心。不要混淆已被提升的函数声明。请参阅:运行时不要着眼于优化(函数被调用的次数、全局值等)和/或是否需要“紧急援助”来展望每件事?我认为,如果运行时忽略了任何类型的处理,只在执行路径时引导函数,那么性能可能会受到很大影响,大量优化机会可能会被忽略。例如,根据相同的逻辑,除非事件结束,否则处理程序的内部不会被处理,但我认为不会工作原理是这样的。此外,我认为具体发生的情况可能与引擎有关。警报来自我在另一个问题中看到的原始代码,我了解警报的工作原理,也了解警报的提升。我的疑问是JS引擎如何处理函数和其他条件内的代码。因此,如果针对每个条件异步加载代码,会有什么不同吗n、 好的,正如我所指出的,所有的js引擎都会解析你的所有代码,但它只会有条件地执行。一个区别是,你肯定会有另一个服务器请求,其响应时间假设在“100-600ms”之间,看看这个链接不同的设备解析jquery的速度有多快(1-100ms)我对优化编译器如何处理这种情况而不是执行感兴趣。很明显,false conditional语句中的代码不会被执行。正如我在上面的帖子中所引用的,你的观点是关于性能的,所以我就这样处理这个问题。