在看《高階程式設計》(我的紅寶書) p.183頁時遇到下面乙個問題
var name = "77";var obj =
};(obj.getname = obj.getname)(); //
返回全域性變數 77
這個問題看起來好像有點奇葩,其實它可以從以下兩個方面切入。
一、 在於obj.getname = obj.getname這個賦值的問題。我們可以先看一下規範對 a = b; 的解釋,它其實發生了四步操作:
計算表示式a,得到a的位址refa;
計算表示式b, 得到b的值valueb;
將valueb賦給refa。
返回valueb
從上面的賦值過程中我們可以看到 obj.getname = obj.getname 會返回第二個 obj.getname 所指向的函式表示式。
於是就可以將(
obj.getname = obj.getname)()
視作全域性函式。這個問題便可以看做
var name = "77";var obj =
};var fn =obj.getname;
fn();
//返回全域性變數 77
二、this的值基於呼叫的位置
所以在全域性中呼叫函式的時候 this 指向window,所以他會返回 77,而不是88.
Oracle 過程中變數賦值
create or replace function get sal1 id employees.employee id type return number is sal employees.salary type begin sal 0 select salary into sal from e...
在儲存過程中實現事務
在圖書館管理系統中系統管理員可以進行的操作有 借 還 新增 刪除 修改圖書或新增 刪除 修改讀者等,很多的操作都涉及到多個表的進行,我們一定要保持資料的一致性。如 刪除讀者 操作,會在讀者表 reader 中進行讀者的刪除,該讀者刪除後,借書表 reader book 也沒有必要再保留該讀者的借書記...
sqlserver中在儲存過程中寫事務
由於對資料的操作經常需要併發,所以在儲存過程中使用事務是非常必要的,我經常這樣處理 if exists select from sys.objects where name sp drop proc sp gocreate procedure sp 引數列表.out bit 0 output 輸出引...