函数里定义一个变量和函数外面给函数里添加一个变量的区别

函数一:
function foo() {
    var count = 0;
}
console.log(count) //undefined
函数二:
function foo() {
}
foo.count = 0;
console.log(count) // 0

这两个count我自己试验了一下,我的理解是:函数一中的count是函数内作用域定义的变量,函数外访问不到,而函数二我的理解是也在foo内定义了一个变量,却在全局作用域中能够访问。
请问我的理解错误在哪里,请纠正;
请问这两个count有什么区别,在实际用途中又有何意义?

阅读 4k
3 个回答

你找错实验属性了,window中有count属性,所以你能打印到count的值,正常的话应该会报错

函数一的理解是正确的,函数外访问不到函数内定义的变量

函数二:函数也是对象,也是可以具有属性的,函数内的变量,函数属性,全局属性,这三者是不一样的

function foo() {
    var count = 0; // foo函数内部变量
}
foo.count = 0; // foo函数属性
console.log(count) // window属性

这三个count根本不是同一个变量

第一个count在函数内部声明,叫做局部变量,只在这个函数的执行环境中能够访问到。
第二个count不是变量声明,而是给对象赋予了一个属性,函数在JS中也是对象,而你的foo相当于是全局变量,所以能在整个全局作用域中能够访问到。

前者是变量,供函数内做些计算操作,函数不执行这个变量就用不到,并且外部不能直接访问到它。 后者是属性,供外部访问。
如果理解有困难,那就把前者看成私有属性,后者看成公共属性。

最后那句 console.log(count)也用的不对,那样是直接访问window对象的count属性。

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