js里的函数调用,赋值语句提升

function speakA(){
    alert(this.name);
    alert(this.n);
    speakC();
}
function speakC(){
    this.name = "C";
    this.n = "ddd";

}
speakA();

输出的是C undefined

alert语句在this.name赋值语句之前,为什么还能输出C,但是输出的第二个却是undefined,是和window.name有关吗?window.name这个属性是会默认先赋值吗?

阅读 2k
2 个回答

通俗的解释楼上的意思,你这个窗口标签不关闭的话window.name的值不会回到初始值
这里的this都是指window
第一次执行的结果是""和undefined
这时speakC已经执行过所以window.name的值是C,window.n是ddd
然后你没看清楚想再看一遍 按了f5刷新。刷新后window.name不变,其它变量都回复到初始值
所以此时window.name的值是C,window.n的值是undefined

window.name默认为空
在一个窗口的生命周期内,窗口载入的所有的页面都是共享一个window.name

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题