摘要:通過函數聲明定義的函數,其是后的標識符通過函數表達式定義的函數,其是空字符串。。函數內部的類數組對象,包含傳入函數中的所有參數。返回實際傳入函數的參數個數。這個過程有四個步驟創建空對象使的指向構造函數的原型以作為構造函數的上下文調用。
函數屬性
name。Firefox、Safari、Chrome、Opera支持這個非標準屬性。通過函數聲明定義的函數,其name是function后的標識符;通過函數表達式定義的函數,其name是空字符串。
var a = function() {}; var b = new Function(); function c() {} console.log(a.name); //"" console.log(b.name); //anonymous console.log(c.name); //c
prototype。函數原型。
length。返回定義函數的參數個數。
var a = function(){}; function b(i) {return i;} console.log(a.length); //0 console.log(b.length); //1
arguments。函數內部的類數組對象,包含傳入函數中的所有參數。可以通過數組下標的方式訪問傳入函數里的每一個參數。arguments.length返回實際傳入函數的參數個數。
function add() { var _length = arguments.length; var _init = 0; for (var i=0; i<_length; i++) { _init += arguments[i]; } return _init; } add(1,2,3,4); //10
callee和caller。
function outer() { function inner(){ console.log(arguments.callee.name); //inner console.log(arguments.callee.caller.name); //outer } inner(); } outer();
this函數內部屬性。this指的是誰?了解更多。
函數方法
apply()和call()
function sum(num1, num2) { return num1 + num2; } function anotherSum(num1, num2) { return sum.apply(this, arguments); } function yetAnotherSum(num1, num2) { return sum.call(this, num1, num2); } console.log(sum(1,2)); //3 console.log(anotherSum(1,2)); //3 console.log(yetAnotherSum(1,2)); //3
bind()
var window.color = "red"; var o = {color:"blue"}; function sayColor() { return this.color; } console.log(sayColor()); //red var sayOColor = sayColor.bind(o); console.log(sayOColor()); //blue
函數聲明提升,使其在加載作用域數據之前(編譯階段)可用。
//變量聲明提升 console.log(a); //undefined var a = 1; console.log(a); //1 //這個過程相當于 var a; console.log(a); a = 1; console.log(a); //函數聲明會覆蓋同名變量聲明 console.log(typeof x); //function function x() {} var x;
若傳入函數的參數如果是基本類型值,函數操作的是這個參數的副本;若參數是對象,該參數只是這個對象的引用,函數操作的是對象本身。
var a = 1; var b = {value: 1}; function add(x) { (typeof x === "number") ? (x++) : (x.value++); }; add(a); add(b); console.log(a); //1 console.log(b.value); //2
new這個過程有四個步驟
// new Func(); var obj = {}; //1.創建空對象 obj.__proto__ = Func.prototype; //2.使obj的__prototype__指向構造函數的原型 var ret = Func.call(obj); //3.以obj作為構造函數的上下文調用Func。在為實例構造屬性之前,屬性值為undefined。 if (typeof ret == "object") { //4.如果返回的是對象,就會覆蓋構造的實例;否則會忽略返回的基本類型值。 return ret; } else { return obj; }
轉載請注明出處:https://segmentfault.com/a/1190000004579488
文章不定期更新完善,如果能對你有一點點啟發,我將不勝榮幸。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78851.html
摘要:實際上官方給出的單線程是具有誤導性的。如果開發者在回調函數中調用了阻塞方法比如上文中的函數,那么整個事件輪詢就會阻塞,事件隊列中的事件得不到及時處理。后記參考文章事件輪詢詳述 前言 總括 : 原文地址:理解Node.js的事件輪詢 Node小應用:Node-sample 智者閱讀群書,亦閱歷人生 正文 Node.js的兩個基本概念 Node.js的第一個基本概念就是I/O操作開銷是...
摘要:改寫視圖函數上一章我們感受了視圖的工作流程。循壞表示依次取出中的元素,命名為,并分別執行接下來操作。即為語言,中間包裹了一個段落的文字。有疑問請在杜賽的個人網站留言,我會盡快回復。 改寫視圖函數 上一章我們感受了視圖的工作流程。 為了讓視圖真正發揮作用,改寫article/views.py中的article_list視圖函數: article/views.py from django...
摘要:前言這一講將介紹一下序列化機制和過程函數。然而由于的類型擦除,自動提取并不是總是有效。開發者在自定義類上使用注解,隨后創建相應的并覆蓋方法。 前言 這一講將介紹一下序列化機制和過程函數(processfunction)。 序列化機制 使用 Flink 編寫處理邏輯時,新手總是容易被林林總總的概念所混淆: 為什么 Flink 有那么多的類型聲明方式? BasicTypeInfo.ST...
摘要:之前做過一個用到了消息推送,最近這個項目又用到了推送。限制命名長度限制為字節判斷長度需采用編碼。參考文獻插件文檔極光推送文檔 前言 說一下寫這篇文章的初衷。之前做過一個APP用到了消息推送,最近這個項目又用到了推送。但是由于兩個項目間隔4個多月,推送集成、使用方式等都忘了,所以當時又去看了以前項目的源碼和一些推送相關的博客,尋找那些蛛絲馬跡。突然覺得這樣很浪費時間,為何自己不寫篇文章總...
摘要:比如對于空操作空控制器,你會暴露給給黑客你網站后臺所用的框架,黑客會根據框架本省的漏洞對你網站進行攻擊。因此,我們需要對空控制器空操作進行處理,不給黑客留下任何蛛絲馬跡。好啦,空操作空控制器就先說到這里 當一個高手瀏覽你的網站的時候,你網站的報錯信息將給黑客提供攻擊你網站的信息。比如對于空操作、空控制器,你會暴露給給黑客你網站后臺所用的框架,黑客會根據框架本省的漏洞對你網站進行攻擊。因...
閱讀 970·2021-11-24 10:42
閱讀 3480·2021-11-19 11:34
閱讀 2610·2021-09-29 09:35
閱讀 2534·2021-09-09 09:33
閱讀 646·2021-07-26 23:38
閱讀 2521·2019-08-30 10:48
閱讀 1391·2019-08-28 18:07
閱讀 425·2019-08-26 13:44