小编Chr*_*ine的帖子

吊装范围可变

有人会帮助解释为什么下面的两个代码片段打印出不同的结果吗?

区别在于条件语句中。在第一个中,有一个名为'Jack'的局部变量分配给name,条件是真实的(意味着!name的值为true)。在第二个中,为全局变量名称分配了相同的名称“ Jack”,但条件是虚假的(!name为false)。我的问题是,如果所有这些都不是一样的,为什么会第一个条件是真实的,第二个是假的,如果有什么改变是内部条件体?

我唯一的解释是,条件的主体首先由JS解释器读取,这是它确定name全局/局部,是否需要提升变量声明以及最后记录不同名称值的方式。

甚至在开始解释其主体之前,是否不应该首先评估条件布尔值?然后,在两种情况下,变量“名称”都将被评估为“未定义” ...任何帮助将不胜感激!

关于提升/作用域上下文,确实有一些很好的资源,但是我找不到一个专门回答此问题的资源。

http://javascriptissexy.com/javascript-variable-scope-and-hoisting-explained/

var name = "Paul"; 
function users () {
    if (!name) {
        var name = "Jack";  //<== difference is here, *inside* conditional body
    }
    console.log(name);
}
users(); //outputs "Jack"
Run Code Online (Sandbox Code Playgroud)

var name = "Paul"; 
function users () {
    if (!name) {
       name = "Jack";  //<== difference is here, *inside* conditional body
    }
    console.log(name);
}
users();  //outputs "Paul"
Run Code Online (Sandbox Code Playgroud)

javascript variables scope hoisting

3
推荐指数
1
解决办法
213
查看次数

在功能中更新/检索私人计数器

我在下面创建了一个更新私有计数器的函数,该函数只能通过此函数中的另一个嵌套函数访问.

var private = function() {
  var counter = 0;
  return {
    add: function(increment) { counter += increment},
    retrieve: function() { console.log('the counter is currently set to ' + counter)}
  }
}
Run Code Online (Sandbox Code Playgroud)

这是一个句法问题.我通过以下方式访问函数来更新/检索计数器时遇到问题:

private().add(5);
private().retrieve(); // should return 5, but returns 0
Run Code Online (Sandbox Code Playgroud)

但是,以相同的方式调用函数,但添加变量"p"以某种方式使它工作!

var p = private();
p.add(5);
p.retrieve(); //actually returns 5
Run Code Online (Sandbox Code Playgroud)

不能为我的生活搞清楚这一点.任何有关这方面的指导将不胜感激.

尝试在这个网站上搜索其他问题,但在这里找不到解决方案:

访问javascript闭包中的变量

javascript counter closures function object

2
推荐指数
1
解决办法
322
查看次数

从主目录删除 git (使用终端/命令行)

不知何故,我一定在我的主目录中启动了 git,因为现在当我输入“git status”时,我会得到“未跟踪文件”的完整列表,其中包括我计算机上与 Github 无关的个人文件夹(图片、下载、文档、桌面等...)。

当我ls -a在我的“根”(对我来说,它是在/Users/(my name))处输入时,我看到.git这意味着我在这里有一个 git 目录,但不应该有。我在下面发现了一个关于堆栈溢出的相关问题 - 我对这个问题的后续处理是,因为我的主驱动器中的文件夹是合法的 git 存储库并且我确实想保留,所以我想确保我不会删除这些文件夹与递归rm.

我是一个超级新手,所以我很难知道我应该寻找什么。我已经花了几个小时在这上面,但进展甚微。我发现的另一个可能的解决方案是将我的主驱动器添加到 gitignore,但如果我可以从我的主文件夹中完全删除“.git”,那就更好了。

相关:如何在主目录上撤消 git init?

git terminal command-line

2
推荐指数
1
解决办法
3500
查看次数