使用javascript和全局变量进行提升

时间:2019-10-24 13:10:12

标签: javascript hoisting

以下代码给出了<div target="newsinfo">hello</div> <div target="somethingelse">world</div>的输出。我的印象是所有变量和函数声明都被提升到其作用域的顶部,因此undefined现在应该在调用b之前位于作用域的顶部。但是,我仍然得到a()作为输出吗?

undefined

4 个答案:

答案 0 :(得分:5)

您误解了吊装的工作原理。它不会提升赋值,而只会提升声明。您的代码等效于以下内容:

var b; // undefined
function a(){
 console.log(b)
}
a();
b = 5;

答案 1 :(得分:4)

是的,已悬挂变量声明,但未在b上设置该值。代码看起来像这样

var b
function a(){
 console.log(b)
}
a()
b = 5;

答案 2 :(得分:2)

吊起意味着将在顶部“ 创建”创建变量-但是在值赋值发生的时间// MARK: CollectionView Delegate func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { return 2 } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return imageArray.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { if indexPath.section == 0 { let firstCell = collectionView.dequeueReusableCell(withReuseIdentifier: "addusercell", for: indexPath) as! AddParticipantsCollectionViewCell return firstCell } else { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "userscollectionview", for: indexPath as IndexPath) as! ParticipantsCollectionViewCell cell.imageView?.image = self.imageArray[indexPath.row] return cell } } 不会发生任何变化当执行到达其编写的部分时,该部分仍然会发生。因此,如果在此之前调用b = 5,则a()存在,但尚未分配任何值……因此,b

答案 3 :(得分:0)

您正在使用函数声明来创建函数。因此,函数声明也被挂起,以便在声明之前使用它们。