1. 程式人生 > >js、Extjs中函式的賦值和呼叫

js、Extjs中函式的賦值和呼叫

//設定滾動條;
	function scrollFun(){
		Ext.getCmp('scrollItem').doLayout();
		Ext.getCmp('ScrollPanelID').doLayout();
		//設定滾動條的長度
		console.info('document.getElementById("bodyPanelID").style.height= '+document.getElementById('bodyPanelID').style.height);
		console.info('document.getElementById("bodyPanelID").offsetHeight= '+document.getElementById('bodyPanelID').offsetHeight);
		console.info('document.getElementById("bodyPanelID").clientHeight= '+document.getElementById('bodyPanelID').clientHeight);
		console.info('document.getElementById("bodyPanelID").scrollHeight= '+document.getElementById('bodyPanelID').scrollHeight);
		document.getElementById('scrollItem').style.height=(document.getElementById("bodyPanelID").clientHeight/document.getElementById("bodyPanelID").scrollHeight)*document.getElementById("ScrollPanelID").clientHeight+'px';
		//設定滾動條的高(所在位置)
		document.getElementById('scrollItem').style.top=(document.getElementById('bodyPanelID').scrollTop/document.getElementById('bodyPanelID').scrollHeight)*document.getElementById("ScrollPanelID").clientHeight+'px';
		console.info('document.getElementById("scrollItem").style.height= '+document.getElementById('scrollItem').clientHeight);
	}
	
	
	
	//畫滾動條的長度和top值。
	Ext.get('win').on('click',scrollFun());


在這裡面,當不點選id='win'的元素時,也會呼叫scrollFun()這個函式。其實scrollFun()函式在頁面載入時就已經執行了。當點選時id='win'的元素時,反而報錯了。

為什麼?

原因是:

Ext.get('win').on('click',function(){});因為這句程式碼是重寫Extjs中的click事件,我們把新的函式賦值給click事件。紅色標記的地方是正確的,因為我只是聲明瞭一個函式,然後賦值給click事件,並沒有執行。在js中所有函式、變數、類物件都是var型別,所以都可以互相賦值。但是要注意,scrollFun():在函式名後加了()的就不是賦值了,而是函式執行語句。
Ext.get('win').on('click',scrollFun);對,
Ext.get('win').on('click',function(){});對
Ext.get('win').on('click',scrollFun());錯

function fun(){
      alert('fun');
}
//想把函式fun賦值給a物件
var a=fun;對
var a=fun();錯,這裡變成了執行fun()函數了,而不是賦值。