論js閉包的重要性

很久沒寫博客了,今天發現了一個很有意思的問題,寫下來分享一下

話不多說,貼前端代碼:

<script type="text/javascript" src="js/jquery-1.11.2.min.js"></script>
<script type="text/javascript">
	$(function(){
		$("#btnky").bind('click',function(){
			 //發送給服務端
			 var postMoney=getMoney();
			 alert("發送給後臺:"+postMoney);
			 $.post("to_json.html",{postMoney:postMoney},function(data){
				 alert(data);
			 });
		});
	})
	function getMoney(){
			return 1; 
	}
</script>
</head>
<body>
<input type="button" value="發送後臺" id="btnky">
</body>

 前端一個很簡單的ajax提交代碼,對不對?通過getMoney()函數 得到一個值,然後發送給後臺,注意,該函數是不包含在$()代碼塊裏面的

 後臺代碼:

 也是很簡單的,只是響應用戶的發送數據,代碼如下:

@RequestMapping("/to_json.html")
@ResponseBody
public String to_Json(@RequestParam("postMoney") int postMoney){
	System.out.println("前端發送的錢:"+postMoney);
	return "你給服務端發送的money是:"+postMoney;
}

OK,萬事具備,頁面走起!!

頁面點擊發送

看後臺:

 

貌似沒錯,後臺如願得到我們要的數據

只是,如果有些搗蛋鬼喜歡搗蛋呢?比如我用火狐的firefox注入一個getMoney()方法

好吧,我注入了一個和頁面上相同的函數getMoney(),居然返回100000.太壞了..

OK,讓我們在點擊發送後臺按鈕,看看是什麼情況呢?

天吶.......居然真給變了...

好吧,再看看我們的服務端,是不是也會隨波逐流呢?

我已經無語了,這別個搗蛋鬼豈不是能隨便傳送數據...

不然,如果頁面修改一下呢?代碼如下:

<script type="text/javascript">
	$(function(){
		$("#btnky").bind('click',function(){
			 //發送給服務端
			 var postMoney=getMoney();
			 alert("發送給後臺:"+postMoney);
			 $.post("to_json.html",{postMoney:postMoney},function(data){
				 alert(data);
			 });
		});
		function getMoney(){
			return 1; 
		}
	})
	
</script>
</head>
<body>
<input type="button" value="發送後臺" id="btnky">
</body>

 

注意,這次我的getMoney()函數寫在$()這個裏面去了

OK,我們在刷新頁面,做相同的操作,注入一個getMoney

很奇怪呢,居然沒有變化,不放心,再看看後臺:

也沒有變化,是不是很有意思呢?

呵呵,各位有什麼看法呢?暢所欲言哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章