創建JavaScript函數的幾種方式

来源:http://www.cnblogs.com/chaiyesong/archive/2017/04/23/6750427.html
-Advertisement-
Play Games

window.onload = function() { // console.log('ok'); //正規的創建函數 function test(abc, d) { return abc(d); } function jack(testString) { console.log(testStri... ...


window.onload = function() {
	//	console.log('ok');
	//正規的創建函數
	function test(abc, d) {
		return abc(d);
	}

	function jack(testString) {
		console.log(testString);
	}
	test(jack, 'jackjones');
	test(jack, '我是Jack,您好!');
	//通過Function()創建函數
	var b = new Function('x,y', 'return x+y');
	console.log(b(5, 2));
	//創建匿名函數
	var c = function() {
		console.log('我是您名函數!請問你是麽?');
	}
	c(); //調用匿名函數
	var d = null;
	if(7 > 8) {
		d = function() {
			console.log('7>8');
		}
	} else {
		d = function() {
			console.log('7<8');
		}
	}
	//	console.log(d);
	d();

	function testfor() {
		for(var i = 0; i < arguments.length; i++) {
			console.log(i);
		}
		for(var i = 0; i < 5; i++) {
			console.log(i);
		}
	}
	testfor(1, 2, 3, 4, 5, 6, 7, 8);
	console.log('=======================');

	//普通的遞歸函數的寫法
	function digui(num) {
		if(num == 1) {
			return 1;
		} else {
			return num * digui(num - 1);
		}
	}
	console.log(digui(4)); //調用遞歸函數
	//使用arguments.calle方法實現遞歸方法
	function digui_num(num) {
		if(num == 1) {
			return 1;
		} else {
			return num * arguments.callee(num - 1);
		}
	}
	var OtherDIgui = digui_num;
	digui = null;
	console.log(OtherDIgui(4));
	//this的使用方法
	color = 'yellow'

	function TestColor() {
		var color = 'red';
		console.log(this.color); //這裡的this指向的是window對象
	}

	function TestColor_Test1() {
		var color = 'red';
		console.log(color); //這裡沒有加this表示從函數裡面網外面找
	}

	function TestColor_Test2() {
		var color = 'black';

		function test2() {
			var color = 'test2color';

			function test1() {
				var color = 'test1color';
				return color;
			}
			return test1();
		}
		return color;
	}
	TestColor();
	TestColor_Test1();
	console.log('==========================');
	TestColor_Test2();
	//閉包的使用方法研究
	function bibao() {
		var fontsize = '微軟雅黑';
		return function bibao1() {
			var fontsize = '行書';
			return fontsize;
		}
	}

	function bibao1() {
		var jack = 'jack';
		return function() {
			console.log(jack);
		}
	}
	//調用閉包的匿名函數
	var p = bibao1();
	p();
	//調用非匿名函數的內部函數
	console.log(bibao()());

	function bibao2() {
		var n = 100;

		function fn() {
			return n;
		}
		return fn; //將函數的指針作為函數返回
	}
	console.log(bibao2()());
	console.log('-========')
	//閉包實現累加功能
	function fn1() {
		var n = 1;
		add = function() {
			n += 1;
		}

		function fn2() {
			n += 1;
			console.log(n);
		}
		return fn2;
	}
	var resule = fn1();
	resule();
	resule();
	resule();
	resule();
	resule();
	//研究JavaScript閉包中的this含義
	var obj = {
		testname: 'jack',
		fun: function() {
			var testname = 'funTest';
			console.log(this.testname); //此處訪問到的name為obj的值
			return function InnerFun() {
				console.log(this.testname); //此處的testname的值為Window的值,所以列印出來為undeifined
			};
		},
		addr: '上海市徐匯區',
		fn: function() {
			var age = 100;
			var t = this;
			return function() {
				console.log(t.testname); //將this進行轉換
			}
		}
	}
	var pp = obj.fun();
	console.log(obj.addr);
	pp(); //undefined
	var b = obj.fn();
	b(); //jack
	//創建匿名函數
	var n = function() {
		console.log('ok');
	}
	n(); //匿名函數的調用
	//創建自動執行的函數
	(function() {
		console.log('我是自動執行函數');
	})();
	//使用function創建函數
	var f = new Function('x,y', 'console.log(x*y)');
	f(10, 10);
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 自動裝配 @Resource註解需要提供bean名字,若為空,自動採用標簽下變數名或者方法名為bean的名稱。 @Inject和@AutoWired都是自動裝配,不過前者沒有reqired屬性,建議使用後者。 @Required註解主要用於setter方法之上,在bean中明確指定自動註入值或其屬性 ...
  • 原因:之前修改代碼看心情和工作量。後來接觸了一個小項目的重構工作,發現自己並沒有系統的重構邏輯。所以覺得有必要 去學習一下。所以選擇了上面說的兩本書。以下作為自己看書的領悟和記錄。 首先:為什麼重構? 首先改善代碼易讀性,包括機器和人。 機器易讀性:提高性能,減少冗餘,分類清楚,保持健壯性的前提下盡 ...
  • 1.意圖 對象之間一對多的依賴關係,當目標對象發生改變時,所有依賴於它的對象都要得到通知並自動更新 2.別名 依賴,發佈-訂閱 3.動機 1)需要確保相互協作的對象的一致性(數據要保持一致),但一致性會使各個對象緊密耦合,減低它們的可重用性。 2)Observer模式描述瞭如何建立這種關係:一個目標 ...
  • 原文:《以交易系統為例,看分散式事務架構的五大演進》http://www.tuicool.com/articles/jUVFBbb 原文結構: 概述 單資料庫事務 基於後置提交的資料庫事務 兩段式事務 TCC事務 最終一致性 介紹了分散式資料庫/服務 ,數據一致性方案的演進,針對業務重要性及對一致性 ...
  • 理論 "架構漫談系列" "分散式一致性演算法——paxos" "關於分散式事務、兩階段提交協議、三階提交協議" 中間件、庫、框架 "Spring Cloud" "Spring Cloud 中文網" "JWT——生成token" 案例 "如何設計一個小而美的秒殺系統" "秒殺系統的架構解決之道" ...
  • 正則是用來處理字元串的規則 通過規則可以驗證字元串是否匹配(test)對應的格式;也可以把正則匹配的結果在字元串中捕獲(exec)到 正則的元字元分為:普通元字元;特殊元字元;量詞元字元 普通元字元:用/ /包起來的除了具有特殊意義的,其餘的都是代表本身意義的普通元字元 特殊元字元:\d =>0-9 ...
  • 今天看到一個朋友在github上面的issue大概問題就是怎麼在不同的電腦上面使用git有個這麼個東西Submoudle中文叫做子模塊具體使用教程看這裡Git-工具-子模塊這裡只說怎麼搞hexo多主題切換和換電腦啥的開始首先分兩種情況1. 主題的出了配置文件 或者其他文件沒有DIY過,都是直接clo... ...
  • 本文轉載自不蒜子不如靜態網站建站現在有很多快速的技術和平臺,但靜態是優點也有缺點,由於是靜態的,一些動態的內容如評論、計數等等模塊就需要藉助外來平臺,評論有“多說”,計數有“不蒜”!>“不蒜子”與百度統計谷歌分析等有區別:“不蒜子”可直接將訪問次數顯示在您在網頁上(也可不顯示);對於已經上線一段時間... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...