当前位置: 首页 > 知识库问答 >
问题:

理解以下javascript代码[重复]

彭梓
2023-03-14

我遇到了一些javascript。我不理解代码执行的流程。

var val = 'ap';

function func() {
    if (!val) {
        var val = 'ple';
    }
    console.log(val);
}
func();
console.log(val);

我认为输出是'ap'然后'ap'。但我得到了'ple'和'ap'。这是怎么发生的?

共有2个答案

越季萌
2023-03-14

Javascript有函数作用域,而不是块作用域,直到我们在ES6中得到let语句...

鞠隐水
2023-03-14

下一行中的变量val

var val = 'ple'

被提升到函数的顶部。

val的(函数内部)值是undefined,它是falsey的,这就是为什么if条件成功的原因,因为!falsetrue,因此函数内部的val被设置为'ple'。大致看起来像

function func()
   var val; // val = undefined
   if(!val) {  // it's still undefined and !undefined is true
      val = 'ple'; // so this code executes
   }
   console.log(val); // 'ple'
}

请记住javascript中的作用域不是块作用域。相反,您要做的是设置已经声明的val

val = 'ple';
 类似资料:
  • 我正在学习React.js。我熟悉下面的代码 但我得到了以下代码作为问题的解决方案。 我不能理解上面的代码。谁能帮我理解一下? 这里的是什么? 我知道播音员。为什么我在这里传递它和这里

  • 本部分试图从专题和业务流程的角度来剖析 Neutron 代码,以便理解如此设计的内涵。

  • 我似乎不能完全理解下面的陈述。

  • 我被赋予以下任务: 给出了-2个列表。第一个列表的大小为N1,第二个列表的尺寸为N2。每个列表的元素不相同。编写一段代码,用第一个和第二个列表中的元素创建一个新列表。此列表也不应有相同的元素。还要估计代码的复杂性。 我编写了以下代码: 并假设 getNewList 方法的执行时间与 N1*N2 成正比。在回复中,我收到以下内容,没有任何解释 - “你错了,这段代码的复杂性不是 N1*N2”。 那么

  • 精心挑选的有用的 JavaScript 代码片段,你可以在 30 秒或更短的时间内理解。

  • 问题内容: 今天,我一直在尝试使用SQL二进制对象。我首先将图像存储在表中,向图像进行base64编码的AJAX请求,然后与之一起显示。 图像显示良好。 我正在处理的Web项目也需要文件下载(主要是PDF)-太好了,我想,我也将PDF存储为SQL二进制对象,以相同的方式从服务器收集它,然后以某种方式神奇地解码在另一端下载。 帮助! 我首先尝试使用jQuery base64解码器(https://g