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

为什么下面的代码将x值打印为1而将y值打印为10

常嘉平
2023-03-14
    var y;

function modify(x) {

    var z = 5;
    x += 2;
    y += x + z

}

var x = 1,
    y = 2,
    z = 3
modify(x)

上面的片段结果是x=1,y=10,z=3,请解释这段代码。提前致谢

共有1个答案

龙永逸
2023-03-14

在modify函数中,“x”在modify的作用域中,而不是在全局作用域中使用x。此外,基元类型(如数字)是通过值而不是引用传递的。因此,x总是保持1。

同样在modify函数中,您要在modify函数的作用域中声明一个新的变量z,所以就像x一样,z将保持为3。

由于函数中没有声明y,它将使用全局作用域,所以这是唯一要改变的作用域。在这个例子中,它是2+((1+2)+5),这就是你得到10的方法。

 类似资料:
  • 问题内容: 执行此操作后(幕后)会发生什么? 也就是说,当变量在一个语句中后增加并分配给它自己时?我编译并执行了这个。 即使整个陈述之后仍然是7 。在我的书中,它说是递增的! __ 问题答案: 确实增加了。但是,您正在将back 的旧值分配给自身。 递增并返回其旧值。 将旧值分配回自己。 因此,最后将其分配回其初始值。

  • 问题内容: 我遇到了这种语法: 这个带有两个点的语法是什么? 在哪里可以找到有关它的信息? 它仅适用于布尔值还是以其他不同方式实现? 问题答案: 是条件运算符。(不只是一部分,整个方法参数是示例中条件运算符的一种用法。) 它通常被称为三元运算符,但这只是其本质的一个方面-具有三个操作数- 而不是其名称。如果在Java中引入了另一个三元运算符,则该术语将变得模棱两可。之所以称为条件运算符,是因为它有

  • 为什么我的代码要打印这个,而不是打印保存在数据库中的学生姓名? 下面是我的代码:

  • 问题内容: 我生成了x的两个矩阵: 第一矩阵:和。 第二矩阵:和。 使用以下代码,第一个矩阵花费了8.52秒完成: 使用此代码,第二个矩阵花费了259.152秒来完成: 运行时间显着不同的原因是什么? 正如评论所说,仅打印需要秒,而给。 正如其他指出它对他们正常工作的人一样,例如,我尝试了Ideone.com,这两段代码以相同的速度执行。 测试条件: 我从 Netbeans 7.2 运行了此测试,

  • 所以我有这个代码,叫我白痴哈哈,但是我不能让它打印7。 代码: 我需要知道如何改变与函数中的参数同名的变量。 任何帮助都将不胜感激,如果你不明白这个问题,我很乐意解释更多。