1. 程式人生 > >js:深入函式(函式是物件)

js:深入函式(函式是物件)

//由於函式是物件,所以可以直接把函式通過引數傳遞進來;也可以把函式作為返回值。
function calFun(fun,arg){
  //第一個引數就是函式物件
  return fun(arg);
}

function sum(num){
  return num+100;
}

function say(str){
  alert("hello "+str);
}
//呼叫了say函式
callFun(say,"js"); //hello js
//呼叫了sum函式
alert(callFun(sum,100)); //200

function fun1(arg){
  var rel = function(num){
    return arg+num;
  }
  return rel;
}  //返回的是一個函式物件
//f是一個函式物件,可以完成呼叫
var f = fun1(20);
alert(f); //function(num){return arg+name;}
alert(f(30)); //50

var arr = [1,2,33,12,198];
arr.sort();
alert(arr);  //1,12,198,33   對於js而言,預設是按照字串進行排序的。

//如果我們希望通過數字大小來排序,可以通過如下方式:
function sortByNum(a,b){
  return parseInt(a)-parseInt(b);
}
arr.sort();
alert(arr);  //1,2,12,33,198

//根據物件來排序
function Person(name,age){
  this.name=name;
  this.age=age;
}

var p1 = new Person("John",23);
var p2 = new Person("Lemo",39);
var p3 = new Person("Ada",41);

var ps = [p1,p2,p3];

//ps.sort(sortByAge);
//ps.sort(sortByProperty("age"));

function sortByName(obj1,obj2){
  return obj1.name>obj2.name?1:(obj1.name==obj2.name?0:-1);
} //按名字排序
function sortByAge(obj1,obj2){
  return obj1.age-obj2.age;
} //按年齡排序

//通過上述方法來處理排序,帶來的問題是需要為每一個屬性建立一個函式,顯然不靈活
//但是如果通過函式的返回值呼叫就不一樣了。
function sortByProperty(propertyName){
  var sortFun = function(obj1,obj2){
    return obj1[propertyName]>obj2[propertyName]?1:(obj1[propertyName]==obj2[propertyName]?0:-1);
  }
  return sortFun;
}

相關推薦

從零開始的全棧工程師——js篇2.12面向物件

面向物件 Js一開始就是寫網頁特效,面向過程的,作者發現這樣寫不好,程式碼重複利用率太高,計算機記憶體消耗太大,網頁效能很差。 所以作者就收到java和c的影響,往面向物件靠齊。Js天生有一個Object,但他沒有面向物件的特徵(封裝,繼承,多型)。 最後研究出了建構函式。 建構函式最終目的是生成物件

js選擇器常用總結

<ul><li id="foo">foo</li> <li id="bar">bar</li> <li id="baz">baz</li> </ul> $('li').index

javascript深入瞭解面向物件

目標:以執行效率最高的方式實現javascript的面向物件模式。 實現目標方式:從最基礎的實現開始一步一步優化到最後的實現方式。請執行或者讀懂每一段程式碼。 一,建立物件: var people1 = new Object();//只有物件上才能新增屬性 p

js深入函式函式物件

//由於函式是物件,所以可以直接把函式通過引數傳遞進來;也可以把函式作為返回值。 function calFun(fun,arg){   //第一個引數就是函式物件   return fun(arg); } function sum(num){   return num+1

函式和常用模組【day06】pickle模組十一

本節內容 1、dumps序列化和loads反序列化 2、dump序列化和load反序列化 3、序列函式 1、dumps序列化和loads反序列化 dumps()序列化 1

函式和常用模組【day06】hashlib模組十二

本節內容 1、簡述 2、加密 3、sha1加密 4、sha256加密 5、sha384加密 6、sha512加密 7、hmac加密 一、簡述   我們寫程式中,經常需要對字串進行MD5加密,python中也支援這種加密,下面說說,這個加密模組:hashlib。 二、MD5加密

珠峰JS筆記2.1函式,原型,DOM,this

> 原型深入 var oBox = document.getElementById('box'); var op = oBox.getElementById('txt'); //報錯,沒有這個方法 報錯:Uncaught TypeError: oBox.getElementB

學習筆記直面配分函式待完善

配分函式,是未歸一化概率所有狀態的積分(對於連續變數)或求和(對於離散變數) 直面配分函式,是由於配分函式,在很多模型上,在積分和求和上面很難計算,所以書中在本章,我認為主要介紹了7種方法,3種策略。 基於MCMC 的改進求解 @@1.對數似然梯度----能量函式(負相

面向物件建立物件--建構函式模式02

上一篇工廠模式中有一個例子 現在建立自定義的建構函式,從而定義自定義物件型別的屬性和方法。例如,可以使用建構函式模式將上面的例子重寫如下  function Person(name, age, job) { this.name = name; this

面向物件建立物件--寄生建構函式模式06

這種模式的基本思想是建立一個函式,該函式的作用僅僅是封裝建立物件的程式碼,然後再返回新建立的物件;但從表面上看,這個函式又很像是典型的建構函式。 function Person(name, age, job) { var o = new Object();

Opencv學習筆記addWeighted函式影象融合

addWeighted函式 融合圖片尺寸不變 1、函式作用 作用:實現兩幅圖片的(疊加)線性融合; 2、函式原型 void addWeighted(InputArray src1, double alpha, InputArray src2, doubl

spring深入學習二十 IOC 之建構函式例項化 bean

createBeanInstance() 用於例項化 bean,它會根據不同情況選擇不同的例項化策略來完成 bean 的初始化,主要包括: Supplier 回撥:obtainFromSupplier() 工廠方法初始化:instantiateUsingFactoryMet

5、【C++ STL】仿函式函式物件

仿函式(函式物件)     仿函式又稱函式物件,函式物件首先是一個物件,即某個類的例項。其次,函式物件的行為和函式一致,即是說可以像呼叫函式一樣來使用函式物件,如引數傳遞、返回值等。這種行為是通過過載類的()操作符來實現的。 【示例】 class Print {

統計學習方法函式Kernel function

作者:桂。 時間:2017-04-26  12:17:42 前言 之前分析的感知機、主成分分析(Principle component analysis, PCA)包括後面看的支撐向量機(Support vector machines, SVM),都有用到核函式。核函式是將訊號對映到高維

logistic迴歸詳解(二損失函式cost function詳解

有監督學習 機器學習分為有監督學習,無監督學習,半監督學習,強化學習。對於邏輯迴歸來說,就是一種典型的有監督學習。 既然是有監督學習,訓練集自然可以用如下方式表述: {(x1,y1),(x2,y2),⋯,(xm,ym)} 對於這m個訓練樣本,每個樣本本身

Python基本運算、基本函式包括複數、Math模組、NumPy模組

基本運算 x**2 : x^2 若x是mat矩陣,那就表示x內每個元素求平方 inf:表示正無窮 邏輯運算子:and,or,not 基本函式 字典的get方法 a.get(k,d) get相當於一條if…else…語句。若k在字典a中,

機器學習啟用函式Activation Function

0. 啟用函式 上圖為wiki上的定義:啟用函式定義了每個節點(神經元)的輸出和輸入關係的函式。 下表:常用啟用函式 編號 函數 公式 1) sigmoid(

對匿名函式深入理解徹底版

-function(){ console.log(1); }() +function(){ console.log(2); }() ~function(){ console.log(3); }() !function(){ console.log(4); }() &fu

損失函式Hinge Lossmax margin

Hinge Loss簡介 Hinge Loss是一種目標函式(或者說損失函式)的名稱,有的時候又叫做max-margin objective。其最著名的應用是作為SVM的目標函式。 其二分類情況下,公式如下:  l(y)=max(0,1−t⋅y) 其中,y是預測值(-1到1之間),t為目標值(±1)。

C++之函式物件/偽函式Function Object詳解

       除了自定義的函式物件,標準庫還為我們提供了一系列現成的函式物件, 比如常見的數學、邏輯運算等。例如:negate<type>(),plus<type>(),minus<type>(),multiplies<type&g