Javascript执行上下文和变量accessibilty

时间:2018-05-23 01:26:30

标签: javascript

Vue.prototype.$copyText = function (text, select,container) {
    var btn = document.querySelector(select);
    return new Promise(function (resolve, reject) {
        var clipboard = new Clipboard(btn, {
            text: function () {
                return text;
            },
            action: function () {
                return 'copy'
            },
            container: typeof container === 'object' ? container : 
                document.body
            });
            clipboard.on('success', function (e) {
                clipboard.destroy();
                resolve(e);
            });
            clipboard.on('error', function (e) {
                clipboard.destroy();
                reject(e);
            });
        });
    }

现在我知道局部范围变量在该函数之外的任何地方都不可用,但我在这里感到困惑的是关于执行堆栈。因此,当调用foo时,堆栈将是全局的,foo,bar。并且变量查找也会在堆栈中向下移动。因此,通过这种逻辑,当从foo内部调用时,为什么'a'在bar中无法访问。

1 个答案:

答案 0 :(得分:0)

每个函数只能访问自己的堆栈帧,而不能访问其中一个调用者。

此外,此堆栈由内部/运行时/编译器内部处理,而不能直接访问更高级语言,后者通过使用符号变量访问其数据,其后备数据可来自各种类型的地方。变量的可见性由语言定义,与存储它们的存储位置无直接关系。

几乎所有语言都是如此。

在JavaScript中,函数可以访问封闭的范围。如果你愿意,范围也会“叠加”(我认为正确的术语是它们“嵌套”),但这与调用堆栈不同。