鍍金池/ 問(wèn)答/HTML/ 函數(shù)里定義一個(gè)變量和函數(shù)外面給函數(shù)里添加一個(gè)變量的區(qū)別

函數(shù)里定義一個(gè)變量和函數(shù)外面給函數(shù)里添加一個(gè)變量的區(qū)別

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

這兩個(gè)count我自己試驗(yàn)了一下,我的理解是:函數(shù)一中的count是函數(shù)內(nèi)作用域定義的變量,函數(shù)外訪問(wèn)不到,而函數(shù)二我的理解是也在foo內(nèi)定義了一個(gè)變量,卻在全局作用域中能夠訪問(wèn)。
請(qǐng)問(wèn)我的理解錯(cuò)誤在哪里,請(qǐng)糾正;
請(qǐng)問(wèn)這兩個(gè)count有什么區(qū)別,在實(shí)際用途中又有何意義?

回答
編輯回答
傲嬌范

你找錯(cuò)實(shí)驗(yàn)屬性了,window中有count屬性,所以你能打印到count的值,正常的話應(yīng)該會(huì)報(bào)錯(cuò)

函數(shù)一的理解是正確的,函數(shù)外訪問(wèn)不到函數(shù)內(nèi)定義的變量

函數(shù)二:函數(shù)也是對(duì)象,也是可以具有屬性的,函數(shù)內(nèi)的變量,函數(shù)屬性,全局屬性,這三者是不一樣的

function foo() {
    var count = 0; // foo函數(shù)內(nèi)部變量
}
foo.count = 0; // foo函數(shù)屬性
console.log(count) // window屬性

這三個(gè)count根本不是同一個(gè)變量

2017年9月1日 04:15
編輯回答
笨小蛋

前者是變量,供函數(shù)內(nèi)做些計(jì)算操作,函數(shù)不執(zhí)行這個(gè)變量就用不到,并且外部不能直接訪問(wèn)到它。 后者是屬性,供外部訪問(wèn)。
如果理解有困難,那就把前者看成私有屬性,后者看成公共屬性。

最后那句 console.log(count)也用的不對(duì),那樣是直接訪問(wèn)window對(duì)象的count屬性。

2018年4月17日 19:54
編輯回答
心沉

第一個(gè)count在函數(shù)內(nèi)部聲明,叫做局部變量,只在這個(gè)函數(shù)的執(zhí)行環(huán)境中能夠訪問(wèn)到。
第二個(gè)count不是變量聲明,而是給對(duì)象賦予了一個(gè)屬性,函數(shù)在JS中也是對(duì)象,而你的foo相當(dāng)于是全局變量,所以能在整個(gè)全局作用域中能夠訪問(wèn)到。

2017年3月10日 05:11