JavaScript var 可见性

标签 javascript oop function visibility core

鉴于此代码:

function MyClass() {
    var v = '1';
    this.hi = function() {
        console.log('Value of V is ' + v);
        var v = '2';
        console.log('Value of V is ' + v);
        delete(v);
        console.log('Value of V is ' + v);
    }
}

当我做类似的事情时:

z = new MyClass();
z.hi();

我得到的结果是:

Value of V is undefined 
Value of V is 2
Value of V is 2

我想解释的是为什么结果是这样的。

  • 为什么 V 是未定义的(我的理解方式 - 它可能不正确 - 是在 JS 中,它都是定义时的,而不是运行时的,所以在定义时,函数有它自己的变量“v ”,但它尚未在第一行定义)。

  • 为什么V没有被删除?保持相同的值?

  • 如何从“上一级”访问值为“1”的“v”?

  • 我知道如果我在“hi”函数中使用不同的变量名称,我将能够在函数中“看到”值为“1”的变量“v”。所以我隐藏了原始的,但这仍然留下了问题#3 - 我如何访问“顶级”?

谢谢!

最佳答案

You can't delete a variable like that .

您无法从封闭范围访问 v,因为内部范围中的 v 会“隐藏”它。重命名它。

关于JavaScript var 可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5555278/

相关文章:

javascript - where 子句上的意外标记 ' : '

c++ - 我怎样才能让一个类实现一个接口(interface)....(C++)

Java 获取已知类名的现有对象列表(动态)

javascript - 在 JavaScript 中创建面向对象编程的本地状态

javascript - jQuery :contains can't find text

javascript - 输入触发具有延时功能,输入值变化时等待

MySQL : Break string by delimiters (^A)

在函数内部声明函数时出现 C++ 语法错误

javascript - 如何将 javascript 数组元素连接并显示为无序列表?

C++ 模板与聚合