有人会帮助解释为什么下面的两个代码片段打印出不同的结果吗?
区别在于条件语句中。在第一个中,有一个名为'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) 我在下面创建了一个更新私有计数器的函数,该函数只能通过此函数中的另一个嵌套函数访问.
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)
不能为我的生活搞清楚这一点.任何有关这方面的指导将不胜感激.
尝试在这个网站上搜索其他问题,但在这里找不到解决方案:
不知何故,我一定在我的主目录中启动了 git,因为现在当我输入“git status”时,我会得到“未跟踪文件”的完整列表,其中包括我计算机上与 Github 无关的个人文件夹(图片、下载、文档、桌面等...)。
当我ls -a在我的“根”(对我来说,它是在/Users/(my name))处输入时,我看到.git这意味着我在这里有一个 git 目录,但不应该有。我在下面发现了一个关于堆栈溢出的相关问题 - 我对这个问题的后续处理是,因为我的主驱动器中的文件夹是合法的 git 存储库并且我确实想保留,所以我想确保我不会删除这些文件夹与递归rm.
我是一个超级新手,所以我很难知道我应该寻找什么。我已经花了几个小时在这上面,但进展甚微。我发现的另一个可能的解决方案是将我的主驱动器添加到 gitignore,但如果我可以从我的主文件夹中完全删除“.git”,那就更好了。