精华内容
下载资源
问答
  • C++ 自定义函数 入门

    千次阅读 2018-12-23 17:04:30
    学C++语言的同学们!...来建立个自己的函数(function)吧! int 这里写函数名(这里列举函数需要另外输入的值) { 这里是执行的代码段 return 返回的值; } 看不大懂?没关系。直接看实例吧! #inclu...

    学C++语言的同学们!

    你是否在为自己的程序只有main()的主函数而觉得乏味枯燥?

    你是否在为自己程序进行多次相同运算时,而在拼命复制代码而抓狂?

    来建立一个自己的函数(function)吧!

    int 这里写函数名(这里列举函数需要另外输入的值)
    {
            这里是执行的代码段
            return 返回的值;
    }
    

    看不大懂?没关系。直接看实例吧!

    #include <iostream>
    using namespace std;
    int check(int a,int b)//函数需要在main()前面声明,至于定义,可以放在主函数后
    {
        if(a>b)return a;
        if(b>a)return b;
        if(a==b)return 0;
    }
    int main()
    {
        int a,b;
        cin>>a>>b;
        cout<<check(a,b);//看起来真不错
        return 0;
    }

    讲解:这是一个输出两数中较大者的程序。显而易见,两数相同时,输出的是0。

    输入1 2时,输出的是2;

    输入5 3时,输出的是5;

    输入9 9时,输出的是0。

    仔细看看,终于发现return语句不仅是为了终止程序而生的啦!

    在定义函数check的时候,括号里的定义声明需要用逗号隔开。

    同样的,在主函数main里调用该函数时,需要输入函数名,括号,并在括号内输入相应的常量或者变量名。

    需要注意的是,定义函数的名称不可以跟已包含的库内的函数名称重复。

    例如,在cmath库下定义一个abs()的函数就会出现问题。

    哦对了!在程序里,我提到了定义函数还可以在main()后面。

    这是一个与上个程序等价的程序:

    #include <iostream>
    using namespace std;
    int check(int a,int b);//注意分号
    int main()
    {
        int a,b;
        cin>>a>>b;
        cout<<check(a,b);
        return 0;
    }
    int check(int a,int b)
    {
        if(a>b)return a;
        if(b>a)return b;
        if(a==b)return 0;
    }

    只要你不嫌程序多一行代码的话。

     

    括号里的变量也不一定要是两个int类型的。三个char类型的也行。

    #include <iostream>
    using namespace std;
    int check(char a,char b,char c);
    int main()
    {
        char x,y,z;
        cin>>x>>y>>z;
        cout<<check(x,y,z);
        return 0;
    }
    int check(char a,char b,char c)
    {
        return int(a+b+c);
    }

    喏,就像这样。虽然这个程序有点小脑残,但是... ...你开心就好。

    发现了吗?定义时有几个变量,在调用时,就需要输入几个相同类型变量/常量。谁都不希望程序报错。

    同时:要注意返回(return)!不然也会报错。

    现在,你可以回到自己的编辑器里,尝试着定义变量的。至于其他的,我以后还会介绍的。

    欢迎指正+提问!

    end.

    展开全文
  • 微信小程序云函数入门使用

    千次阅读 2019-08-29 17:04:54
    微信小程序提供的云函数可以解决这问题。 整理下云函数的使用入门,只是把文档的步骤罗列了一下,不喜勿喷! (说真的,一定要看好官方文档,再去想问题;遇到问题可以直接去社区查看,有很详细的解决办法!...

    joke

     

    场景:怎样绕过后台服务器去让小程序独立存储一些文件和数据的简单操作?

              微信小程序提供的云函数可以解决这一问题。

     

    整理下云函数的使用入门,只是把文档的步骤罗列了一下,不喜勿喷!

    (说真的,一定要看好官方文档,再去想问题;遇到问题可以直接去社区查看,有很详细的解决办法!)

    参考:https://developers.weixin.qq.com/community/develop/article/doc/000ce84fe30a30fd6d09dc05456813
               https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions/wx-server-sdk.html

     

    1、使用现有的项目:

        开发工具左上角有“云开发”,点击根据提示一步步执行完成即可;
        
        环境设置:
            1、环境 :dev
            2、环境id : dev-moce
            
    2、在现有的项目代码基础上,在project.config.json文件中配置 云函数 的存放目录位置,比如:

        "cloudfunctionRoot": "./cloudfunctionRoot"   即在project.config.json当前文件同目录里的cloudfunctionRoot下面存放云函数
        
    3、在app.js中配置使用的环境等:

    	//app.js
    	App({
    	  onLaunch: function () {
    		if (!wx.cloud) {
    		  console.error('请使用 2.2.3 或以上的基础库以使用云能力')
    		} else {
    		  wx.cloud.init({
    			env: "dev-moce",//环境id
    			traceUser: true,
    		  })
    		}
    	  }
    	})

    4、然后使用云函数需要依赖 wx-server-sdk所以就需要安装下这个东西:

        参考官方文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions/wx-server-sdk.html
        
        云函数中使用 wx-server-sdk 需在对应云函数目录下安装 wx-server-sdk 依赖,在创建云函数时会在云函数目录下默认新建一个 package.json 并提示用户是否立即本地安装依赖。
        请注意云函数的运行环境是 Node.js,因此在本地安装依赖时务必保证已安装 Node.js,同时 node 和 npm 都在环境变量中。
        如不本地安装依赖,可以用命令行在该目录下运行:

    npm install --save wx-server-sdk@latest

      4
        所以我这边安装:(保证电脑上安装了node和npm) windows命令框,切换到当前自己指定的云函数目录(cloudfunctionRoot)下,然后执行上面的命令;

       4.1

    5、接下来创建使用云函数:

    	// 云函数入口文件
    	const cloud = require('wx-server-sdk')
    
    	cloud.init()
    
    	// 云函数入口函数
    	exports.main = async (event, context) => {
    	  const wxContext = cloud.getWXContext()
    
    	  return {
    		event,
    		openid: wxContext.OPENID,
    		appid: wxContext.APPID,
    		unionid: wxContext.UNIONID,
    	  }
    	}

    这段代码是不可以写在pages里的文件中的;只能在云函数目录中cloudfunctionRoot创建js文件去做处理,才能require('wx-server-sdk')依赖到不报错

         依赖报错

    6、然后出现异常信息:

        文件 functions/delformid/index.js 在 project.config.json 'cloudfunctionRoot' 指定的目录, 如果不希望在小程序/小游戏的运行环境中执行该文件,请使用 project.config.json "miniprogramRoot" 组织项目目录结构
        6.1
        解决办法,参考社区帖子(时间旅行者:https://developers.weixin.qq.com/community/develop/doc/00026c7b020aa03ec297410ca56c00?highLine=cloudfunctionRoot

        6.2

    7、接下来怎样调用云函数:

        (1)、首先,在cloudfunctionRoot下创建Node.js云函数,然后修改main函数用作测试:

    // 云函数入口文件
    const cloud = require('wx-server-sdk')
    
    cloud.init()
    
    // 云函数入口函数
    exports.main = async (event, context) => {
      return {
    	sum: event.a + event.b
      }
    }
    

       7.1

        (2)、如果调用刚写好的这个云函数,那么就需要部署更新到云函数库
        
                在小程序中调用这个云函数前,我们还需要先将该云函数部署到云端。在云函数目录上右键,在右键菜单中,我们可以将云函数整体打包上传并部署到线上环境中。
                 7.2
        (3)、然后再pages页面中调用即可:

    wx.cloud.callFunction({
      // 要调用的云函数名称
      name: 'add',
      // 传递给云函数的参数
      data: {
    	a: 1,
    	b: 2,
      },
      success: res => {
    	console.log('11111111111111  result == '+JSON.stringify(res.result));
      },
      fail: err => {
    	console.log('11111111111111  err == ' + JSON.stringify(err));
      },
      complete: () => {
    	console.log('11111111111111  完成 ');
      }
    })
    

    8、云函数分小程序端 API、服务端API和HTTP API,这三个有什么关联?或区别吗?
            
        其实这三个东西是独立分开的;
            # 服务端API是给后台服务器人员参考查看的;
            # HTTP API 是用来通过外部服务器访问小程序云函数用的;
            # 小程序端API就可以支撑绕过服务器来实现简单的存储了;
            
    9、使用云函数上传文件:

        PS:(1)、wx.chooseImage(Object object)        通过拍照或者手机相册去选择本地图片
                (2)、wx.chooseMessageFile(Object object)  通过打开和朋友的聊天记录里,选择所有的视频图片等文件

    //通过选择图片,来上传文件到  ( 云开发 ->  云存储 )
    wx.chooseImage({
      count: 1,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success(res) {
    	// tempFilePath可以作为img标签的src属性显示图片
    	const tempFilePaths = res.tempFilePaths[0]
    
    	wx.cloud.uploadFile({
    	  cloudPath: 'image/example.png',//这个路径是云存储的相对路径;
    	  filePath: tempFilePaths, // 文件路径
    	  success: res => {
    		//结果包含文件id, res.fileID
    		console.log('1111111111111111  result == ' + JSON.stringify(res));
    	  },
    	  fail: err => {
    		console.log('1111111111111111  error == '+JSON.stringify(err));
    	  }
    	})
    
      }
    })
    

        cloudPath:: 'image/example.png',//这个路径是云存储的相对路径;比如:image/example.png如果云存储里没有image目录会自动创建这个目录
        

        执行完,刷新存储管理即可查看!

    10、使用云函数下载文件:

        参考文档即可明白:

        wx.cloud.downloadFile({
          fileID: 'a7xzcb',
          success: res => {
            // get temp file path
            console.log(res.tempFilePath)
          },
          fail: err => {
            // handle error
          }
        })

    11、删除云存储中的文件:

        wx.cloud.deleteFile({
          fileList: ['a7xzcb'],
          success: res => {
            // handle success
            console.log(res.fileList)
          },
          fail: err => {
            // handle error
          }
        })


    12、用云文件 ID 换取真实链接,可自定义有效期,默认一天且最大不超过一天。一次最多取 50 个:

         wx.cloud.getTempFileURL({
          fileList: [res.fileID],
          success: res => {
            // get temp file URL
            console.log(res.fileList)
          },
          fail: err => {
            // handle error
          }
        })

        结果是:
        
        12
        剩下的就可以自己按照文档和自己的逻辑来实现一些存储啥的了,包括文档上的数据的使用!

     

     

     

     

    展开全文
  • R:函数入门

    千次阅读 2014-10-27 10:08:49
    R函数是第类对象(第类对象在计算机科学中 指可以在执行期创建并作为参数传递给其他函数或存入个变量的实体。将个实体转化为第类对象的过程叫“对象化”)。这意味着函数在绝大多数情况下,也可以作为对象...


        R函数是第一类对象(第一类对象在计算机科学中 指可以在执行期创建并作为参数传递给其他函数或存入一个变量的实体。将一个实体转化为第一类对象的过程叫“对象化”)。这意味着函数在绝大多数情况下,也可以作为对象来操作。

        创建函数的语法如下:

    g <- function( x ){

        return ( x + 1 )

    }

        这里,function()是一个内置的R函数,其功能就是创建函数。在它的右边,其实是function()的两个参数:第一个参数是所创建函数的形式参数列表,上面这段代码中仅仅是x;第二个参数是函数的主体部分,简称函数体,在本例中为:return ( x + 1 )。第二个参数必须是“expression”类,即表达式类。因此,右边这部分创建了一个函数类的对象,然后赋值给g。

        function()的这两个参数在创建函数之后能够通过函数formals()和body()来获得。如下所示:

    > formals( g )

    $x > body( g )

    {

        return(x + 1)

    }

        当在交互模式中使用R时,简单地输入对象的名称就可以把对象打印到屏幕上。函数也不例外,因为函数都是对象。

    > g

    function( x ){

        return ( x + 1 )

    }

    注:如果要用这种方式去查看一个代码篇幅很长的函数,可以借助于page(),如page(abline)。

        需要注意的是,R中一些最基本的函数是直接用C语言写的,所以它们不能用前面的这种方式查看代码。

    > sum

    function (..., na.rm = FALSE)  .Primitive("sum")

     

    ►匿名函数

        R函数function()的目的是创建函数。我们可以直接调用function()而不给对象命名,这样定义的函数叫做匿名函数,因为它们没有名字。

        当函数只有简短一行并被别的函数调用时,使用命名函数非常方便。

    > z <- matrix( c( 1:6 ), nrow=3 )

    > f <- function( x ){  x / c( 2, 8 )  }

    > y <- apply( z, 1, f )

    > y

         [,1]  [,2] [,3]

    [1,]  0.5 1.000 1.50

    [2,]  0.5 0.625 0.75

    > y <- apply( z, 1, function( x ){  x / c( 2, 8 )  } )

    > y

         [,1]  [,2] [,3]

    [1,]  0.5 1.000 1.50

    [2,]  0.5 0.625 0.75

    注:忽略赋值给f的中间过程,即在调用apply()时使用一个匿名函数。一这种方式处理通常比在外部定义一个函数更加清晰易懂。当然,如果函数比较复杂,情况就不一样了。


    ►函数举例

        和大多数编程语言一样,R语言编程的核心是编写函数。函数就是一组指令的集合,用来读取输入、执行计算、返回结果。

        我们先定义一个函数oddcount(),以此简单介绍函数的用法。这个函数的功能是计算整数向量中奇数的个数。代码如下:

    # counts the number of odd integers in x

    > oddcount <- function(x){

    +   k<-0

    +   for(n in x){

    +     if(n %% 2 == 1)   # %% is the modulo operator

    +       k<-k+1

    +   }

    +   return (k)

    + }

    > oddcount( c(1,3,5) )

    [1] 3

    > oddcount( c(1,2,3,7,9) )

    [1] 4

     

        此函数定义了一个名为oddcount的函数,该函数有一个参数x。左花括号引出了函数体的开始部分。在函数体结束之前,R会用+作为提示符,而不是用平常的>,以提醒用户现在还在定义函数(实际上,+是续行符号,不是新输入的提示符)。在键入右花括号来结束函数体之后,R又恢复使用>提示符。

        for(n in x){   if(n %% 2 == 1)  k<-k+1 }这段代码,首先把x[1]赋值给n,然后测试n是奇数还是偶数,之后,接着把x[2]赋值给n,测试其是奇数还是偶数,以此类推,重复后面的过程。这段代码还可以写成:

    for(i in 1:length(x)){   if(x[i]%% 2 == 1)  k<-k+1 }。

        return(k)这条语句把k的计算结果返回给调用它的代码,不过,直接写成:k,也可以达到目的。在没有显式调用return()时,R语言的函数会返回最后计算的值。不过,这个方法必须慎重使用。

        在编程语言的术语里,x是函数oddcount()的形式参数(英文名称是formal argument,或formal parameter,简称形参)。在前面例子第一次调用函数时,c(1,3,5)称为实际参数(actual argument,简称实参)。

        只在函数体内部可见的变量对这个函数来说说局部变量。在oddcount()中,k和n都是局部变量,它们在函数返回值以后就撤销了。

    注:R函数中的形式参数是局部变量。

        R语言允许TRUE和FALSE缩写为T和F。

     

     


    展开全文
  • javascript函数入门到高级

    千次阅读 2012-08-02 20:31:50
    、JavaScript函数入门级 JavaScript函数像一般语言一样也是遵循先声明后使用的原则,函数名只能包含字母、数字、下划线或$,且不能以数字开头。函数常见的声明方式有以下两种: - collapse sourceview plaincopy ...
    一、JavaScript函数入门级
    JavaScript函数像一般语言一样也是遵循先声明后使用的原则,函数名只能包含字母、数字、下划线或$,且不能以数字开头。函数常见的声明方式有以下两种:
    - collapse sourceview plaincopy to clipboardprint?
    // 直接声明函数myfunc  
    function myfunc(/* arguments */) {  
    }  
      
    // 把匿名函数赋值给本地变量myfunc  
    var myfunc = function(/* arguments */) {  
    }  
    注意,上面两种函数声明方式存在细微的差别:第一种方式在声明时就是一个命名的函数,无论是声明在调用之前、调用之后,甚至是不会执行到的位置(例如return语句之后或是永远不会为真的分支里),都在整个作用域可访问;第二种方式是通过把匿名函数赋值给变量的方式,严格意义上说这不是一个函数的声明(function declaration)而是一个函数表达式(function expression),在赋值之前这个函数不能被任何代码访问到,也就是说这个赋值必须在调用之前完成,否则调用时会出现错误:"TypeError: undefined is not a function"。例如:
    - collapse sourceview plaincopy to clipboardprint?
    myfunc1(); // 能够正常调用,因为myfunc1采用直接声明的方式  
      
    function myfunc1() {  
    }  
      
    myfunc2(); // 出错 TypeError: undefined is not a function  
      
    var myfunc2 = function() {  
    };  
    
    函数的基本调用方式与传统语言相同用一对括号调用: myfunc()。JavaScript的函数也支持直接或间接的递归(recursive)调用,例如经典的斐波那契函数用JavaScript可以这样实现:
    - collapse sourceview plaincopy to clipboardprint?
    function fib(n) {  
      if (n == 1 || n == 2) {  
        return 1;  
      } else {  
        return fib(n - 2) + fib(n - 1);  
      }  
    }  
    在JavaScript的函数可以处理变长参数,在函数内部都拥有一个名为arguments的局部变量,它是一个类数组(array-liked)的对象,里面包含了所有调用时传入的参数,有length属性表示参数的个数。例如:
    - collapse sourceview plaincopy to clipboardprint?
    function test() {  
      alert(arguments.length);  
    }  
      
    test(1); // 1  
    test(1, 'a'); // 2  
    test(true, [], {}); // 3  
    利用arguments可以实现类似C语言printf的功能,也可以用来实现方法的多态。
    
    二、JavaScript函数进阶
    2.1 匿名函数和嵌套函数
    
    在JavaScript可以声明一个没有名称的函数,称为匿名函数(Anonymouse Function)。同时JavaScript还允许在函数内部声明函数,称为嵌套函数(Nested Function),嵌套函数的作用域为整个父函数。
    
    在前面函数声明的部分就看到了匿名函数和嵌套函数的一种用法,由于匿名函数没有名称,不会引入新的变量污染上下文环境,而且会带来新的变量作用域,因此匿名函数常被用来防止全局环境污染。
    
    JavaScript运行时中有一个特殊的全局环境(global object),这个对象上面存放全局的函数和变量,实际开发中经常会使用若干第三方的库或多个js文件,若不小心在全局对象引入重复的变量或函数声明,则会造成代码执行混乱。例如先后引入两个js文件,分别定义了自己的函数log作为内部使用,则第二引入的函数会覆盖第一个的定义且不会抛出任何错误,在后续的执行中调用log函数可能会造成错误。这时候使用一个匿名函数将整个js内的逻辑包装起来,就可以避免这种错误,这种方法已经被绝大多数开源js库使用。
    - collapse sourceview plaincopy to clipboardprint?
    (function() { // 匿名函数  
      
    function log(msg) {  
        console.log(msg);  
    }  
      
    // 其他代码  
      
    }()); // 立即执行  
    以上代码就是一个简单的示例,log函数的作用域被限制在这个匿名函数之内,而匿名函数则因为被外面一对小括号()包括起来,形成一个函数表达式,表达式的值是一个函数,紧接着一对小括号表示立即执行这个函数,让原有的代码正常执行一次。不过,这种方式声明的函数、通过var声明的变量等等都是内部的,不能被任何匿名函数以外的代码访问到。如果你需要对外暴露一些函数作为接口的话有如下几种方法:
    - collapse sourceview plaincopy to clipboardprint?
    var mylib = (function(global) {  
      
    function log(msg) {  
      console.log(msg);  
    }  
      
    log1 = log;  // 法一:利用没有var的变量声明的默认行为,在log1成为全局变量(不推荐)  
      
    global.log2 = log;  // 法二:直接在全局对象上添加log2属性,赋值为log函数(推荐)  
      
    return {  // 法三:通过匿名函数返回值得到一系列接口函数集合对象,赋值给全局变量mylib(推荐)  
       log: log  
    };  
      
    }(window));  
    2.2 高阶函数(High-order Function)
    如果函数作为参数或返回值使用时,就称为高阶函数,JavaScript中的函数都可以作为高阶函数来使用,这也是第一类函数的特征。下面我们就分别分析一下这两种使用方法。
    - collapse sourceview plaincopy to clipboardprint?
    function negative(n) {  
      return -n; // 取n的相反值  
    }  
      
    function square(n) {  
      return n*n; // n的平方  
    }  
      
    function process(nums, callback) {  
      var result = [];  
      
      for(var i = 0, length = nums.length; i < length; i++) {  
        result[i] = callback(nums[i]); // 对数组nums中的所有元素传递给callback进行处理,将返回值作为结果保存  
      }  
      
      return result;  
    }  
      
    var nums = [-3, -2, -1, 0, 1, 2, 3, 4];  
    var n_neg = process(nums, negative);  
    // n_neg = [3, 2, 1, 0, -1, -2, -3, -4];  
    var n_square = process(nums, square);  
    // n_square = [9, 4, 1, 0, 1, 4, 9, 16];  
    
    以上代码展示了把函数作为参数传入另一个函数process调用的示例,在process函数的实现中,把callback作为一个黑盒子看待,负责把参数传给它,然后获取返回值,在调用之前并不清楚callback的具体实现。只有当执行到20行和22行时,callback才被分别代表negative或square,分别对每个元素进行取相反值或平方值的操作。
    - collapse sourceview plaincopy to clipboardprint?
    function generator() {  
      var i = 0;  
      return function() {  
        return i++;  
      };  
    }  
      
    var gen1 = generator(); // 得到一个自然数生成器  
    var gen2 = generator(); // 得到另一个自然数生成器  
    var r1 = gen1(); // r1 = 0  
    var r2 = gen1(); // r2 = 1  
    var r3 = gen2(); // r3 = 0  
    var r4 = gen2(); // r4 = 1  
    
    上面的代码展示了把函数作为返回值的示例,generator是一个自然数生成器函数,返回值是一个自然数生成函数。每次调用generator时都会把一个匿名函数作为结果返回,这个匿名函数在被实际调用时依次返回每个自然数。在generator里的变量i在每次调用这个匿名函数时都会自增1,这其实就是一个闭包。下面我们来介绍一下闭包.
    
    
    2.3 闭包(Closure)
    闭包(Closure)并不是一个新鲜的概念,很多函数式语言中都使用了闭包。在JavaScript中,当你在内嵌函数中使用外部函数作用域内的变量时,就是使用了闭包。用一个常用的类比来解释闭包和类(Class)的关系:类是带函数的数据,闭包是带数据的函数。
    闭包中使用的变量有一个特性,就是它们不在父函数返回时释放,而是随着闭包生命周期的结束而结束。比如像上一节中generator的例子,gen1和gen2分别使用了相互独立的变量i(在gen1的i自增1的时候,gen2的i并不受影响,反之亦然),只要gen1或gen2这两个变量没有被JavaScript引擎垃圾回收,他们各自的变量i就不会被释放。在JavaScript编程中,不知不觉就会使用到闭包,闭包的这个特性在带来易用的同时,也容易带来类似内存泄露的问题。例如:
    - collapse sourceview plaincopy to clipboardprint?
    var elem = document.getElementById('test');  
    elem.addEventListener('click', function() {  
      alert('You clicked ' + elem.tagName);  
    });  
    这段代码的作用是点击一个结点时显示它的标签名称,它把一个匿名函数注册为一个DOM结点的click事件处理函数,函数内引用了一个DOM对象elem,就形成了闭包。这就会产生一个循环引用,即:DOM->闭包->DOM->闭包...DOM对象在闭包释放之前不会被释放;而闭包作为DOM对象的事件处理函数存在,所以在DOM对象释放前闭包不会释放,即使DOM对象在DOM tree中删除,由于这个循环引用的存在,DOM对象和闭包都不会被释放。可以用下面的方法可以避免这种内存泄露:
    - collapse sourceview plaincopy to clipboardprint?
    var elem = document.getElementById('test');  
    elem.addEventListener('click', function() {  
      alert('You clicked ' + this.tagName); // 不再直接引用elem变量  
    });  
    上面这段代码中用this代替elem(在DOM事件处理函数中this指针指向DOM元素本身),让JS运行时不再认为这个函数中使用了父类的变量,因此不再形成闭包。
    闭包还会带来很多类似的内存泄露问题,只有在写代码的时候着重注意一下闭包,尽量避免此类的问题产生。
    
    2.4 类构造函数
    JavaScript的函数同时作为类的构造函数,因此只要声明一个函数就可以使用new关键字创建类的实例。
    - collapse sourceview plaincopy to clipboardprint?
    function Person(name) {  
      this.name = name;  
      this.toString = function() {  
        return 'Hello, ' + this.name + '!';  
      };  
    }  
      
    var p = new Person('Ghostheaven');  
    alert(p); // Hello, Ghostheaven!  
    在以上实例中Person函数作为类的构造函数使用,此时this指向新创建的实例对象,可以为实例增加属性和方法,关于详细的面向对象的JavaScript编程可以参考这篇文章。这里我想要说的是,JavaScript函数作为类构造函数使用时的返回值问题。
    - collapse sourceview plaincopy to clipboardprint?
    function MyClass(name) {  
      this.name = name;  
      return name;  // 构造函数的返回值?  
    }  
      
    var obj1 = new MyClass('foo');  
    var obj2 = MyClass('foo');  
    var obj3 = new MyClass({});  
    var obj4 = MyClass({});  
    
    上面的构造函数比较特别,有返回语句,那么obj1~obj4分别指向什么对象呢?实际结果是这样的:
    obj1 = MyClass对象
    obj2 = 'foo'
    obj3 = {}
    obj4 = {}
    具体原因这篇文章有解释,本文不再赘述,由于带返回值的构造函数会产生奇怪的结果,因此不要在构造函数中调用有返回值的返回语句(空return可以)。
    
    三、JavaScript函数妖怪级
    欢迎来到妖怪级函数授课区,在这里会交给你如何淡定自如地面对老怪。。。
    
    3.1 Function类
    在JavaScript运行时中有一个内建的类叫做Function,用function关键字声明一个函数其实是创建Function类对象的一种简写形式,所有的函数都拥有Function类所有的方法,例如call、apply、bind等等,可以通过instanceof关键字来验证这个说法。
    既然Function是一个类,那么它的构造函数就是Function(它本身也是Function类的对象),应该可以通过new关键字来生成一个函数对象。第一个妖怪来了,那就是如何用Function类构造一个函数。Function的语法如下:
    - collapse sourceview plaincopy to clipboardprint?
    new Function ([arg1[, arg2[, ... argN]],] functionBody)  
    其中arg1, arg2, ... argN是字符串,代表参数名称,functionBody也是字符串,表示函数体,前面的参数名称是可多可少的,Function的构造函数会把最后一个参数当做函数体,前面的都当做参数处理。
    - collapse sourceview plaincopy to clipboardprint?
    var func1 = new Function('name', 'return "Hello, " + name + "!";');  
    func1('Ghostheaven'); // Hello, Ghostheaven!  
    以上方法就通过Function构造了一个函数,这个函数跟其他用function关键字声明的函数一模一样。
    看到这儿,很多人可能会问为什么需要这样一个妖怪呢?“存在的即是合理的”,Function类有它独特的用途,你可以利用它动态地生成各种函数逻辑,或者代替eval函数的功能,而且能保持当前环境不会被污染*。
    
    
    3.2 自更新函数(Self-update Function)
    在很多语言中,函数一旦声明过就不能再次声明同名函数,否则会产生语法错误,而在JavaScript中的函数不仅可以重复声明,而且还可以自己更新自己。自己吃自己的妖怪来了!
    - collapse sourceview plaincopy to clipboardprint?
    function selfUpdate() {  
      window.selfUpdate = function() {  
        alert('second run!');  
      };  
      
      alert('first run!');  
    }  
      
    selfUpdate(); // first run!  
    selfUpdate(); // second run!  
    这种函数可以用于只运行一次的逻辑,在第一次运行之后就整个替换成一段新的逻辑。


    原文链接:http://software.intel.com/zh-cn/articles/javascript-first-class-citizen-function/?cid=sw:prccsdn229032

    展开全文
  • 函数入门(Go语言)

    千次阅读 2020-09-08 15:00:33
    普通函数需要先声明才能调用,函数的声明包括参数和函数名等。编译器通过声明才能了解函数应该怎样在调用代码和函数体之间传递参数和返回参数。 语法格式 func 函数名 (参数列表) (返回参数列表){ //函数体 }...
  • 函数 入门 + 模板

    万次阅读 多人点赞 2012-09-13 16:12:09
    在数学中,某个序列的母函数(Generating function,又称生成函数)是种形式幂级数,其每项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。 母函数可分为很多种,包括普通母函数...
  • 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。...
  • import math def quadratic(a,b,c): L =[a,b,c] for i in L: if not isinstance(i,(float,int)): print('数据类型有误') delta=b*b-4*a*c if delta&lt;0: print('无解') return e...
  • MYSQL存储过程和存储函数入门

    万次阅读 多人点赞 2015-09-08 17:43:19
    储存过程是个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程...
  • %% 学习目标:求一元函数最小值和零点 %% 函数的极小值和零点 求解一元函数的最小值 clear all; close all; [x,fval]=fminbnd(@cos,1,5) %函数句柄 y=cos(x) %% 求解自变量范围限定的一元函数的最小值 clear all; ...
  • Python 基础():入门必备知识

    万次阅读 多人点赞 2019-10-29 19:39:54
    Python 入门必备知识,你都掌握了吗?
  • 函数的定义和使用1、基本结构:1 def函数名(参数):2 """3 文档字符串4 """5 函数体6 返回值72、函数名:和变量名命名规则一致,最好不要与内置函数名相同3、参数:和C/C++不同,参数无需指定类型,直接交由解释...
  • Matlab脚本和函数编程入门

    千次阅读 2019-03-19 14:56:14
    Matlab脚本和函数编程入门简介循环控制语句for 语句while 语句条件语句if 语句switch 语句向程序中添加注释运行代码节将您的文件分为多个代码节执行代码节同时使用代码节与控制语句和函数脚本与函数基础工作区与函数...
  • IDL中过程和函数保存的文件后缀都是”.pro”作为扩展名。(ASCII码文件) 1.过程 过程是IDL使用最多的程序方式,“pro”之后为过程名称,同时也可以有若干各参数后关键字,{如果过程包含参数或者关键字的话,...
  • test
  • JDK8函数式编程快速入门干货

    千次阅读 2019-05-03 06:33:27
    本文每条讲解都配置了最简短的代码,适合快速入门或者字典使用,但阅读之后还是需要多看函数原型多看源码,灵活使用为好。 本文目录: 文章目录函数式编程语法常见的Java函数式接口...
  • 消息钩子函数入门

    千次阅读 2003-10-02 01:15:00
     钩子函数种特殊的回调函数。钩子监视的特定事件发生后,系统会调用钩子函数进行处理。不同事件的钩子函数的形式是各不相同的。下面以鼠标钩子函数举例说明钩子函数的原型: LRESULT CALLBACK HookProc(int ...
  • scala学习之旅(三):函数入门

    千次阅读 2018-04-08 12:35:34
    在scala 中定义函数时,如果函数体直接包裹在了花括号里面,而没有使用=连接,则函数的返回值类型就是Unit , 这样的函数就被成为过程,过程通常时不需要返回值的函数,还有种写法,就是将函数的返回值类型定义成为...
  • Arduino入门函数笔记

    千次阅读 2017-04-11 14:03:28
    1、setup() 当Arduino开始的时候被...setup函数只运行一次,每次上电或者被重置时候调用。 int buttonPin = 3; void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop() { // ... }
  • 三角函数计算,Cordic 算法入门

    万次阅读 多人点赞 2013-01-02 13:47:45
    三角函数计算,Cordic 算法入门 三角函数的计算是个复杂的主题,有计算机之前,人们通常通过查找三角函数表来计算任意角度的三角函数的值。这种表格在人们刚刚产生三角函数的概念的时候就已经有了,它们通常是通过...
  • python3入门函数

    千次阅读 2015-09-06 17:50:10
    相信大家学习过其他语言,懂得函数的作用。简单的说函数最好的作用就是可以使程序变得懒惰。python作为后起之秀,当然也会拥有函数这个有用的东西;
  • 函数传值】 向函数传值是函数间传递数据的基本方式,简称传值方式。实质是调用函数把实参的值复制了份传给了被调用函数的形参,使...以下例子运用了函数传值和传址的方式进行函数调用解出了一元二方程: /...
  • C语言入门函数递归与写法

    千次阅读 多人点赞 2018-01-03 19:43:11
    C语言中的递归函数让很多人烦恼,那么如何去写个递归函数呢?
  • 函数式编程入门教程

    千次阅读 2017-04-18 10:49:20
    你可能听说过函数式编程(Functional programming),甚至已经使用了段时间。 但是,你能说清楚,它到底是什么吗? 网上搜索一下,你会轻松找到好多答案。 与面向对象编程(Object-oriented programming...
  • processing的入门函数

    千次阅读 2014-04-17 15:20:29
    通用程序格式,setup只运行一次,就在开始的时候,draw 一般60分之一秒运行一次 void setup() { size(640, 360); } void draw() { background(127); noStroke(); for (int i = 0; i ; i += 20) { fill...
  • 这篇文章本来要放在前面的,但是我看到的晚,然后发现很有用,就转载一下吧。 ...在此表示对这篇文章作者的感谢。 整个流程可以从compressGOP函数... 1、compressGOP对整个图像组(GOP)进行编码,主要是遍历GOP中每
  • R语言入门——rep函数

    千次阅读 2019-09-09 11:17:38
    R语言入门——rep函数说明用法详解xtimeseachlen例子说明 说明 rep函数 用法 rep(x, …) rep.int(x, times) rep_len(x, len) 详解 x 个向量,可以是数字、文本、列表、因子等等(a POSIXct or POSIXlt or Date ...
  • C语言入门学习——函数的使用

    千次阅读 2015-03-10 17:11:45
    默认情况下,公司就是个大部门( 只有个部门的情况下 ),相当于C程序的main()函数。 如果公司比较小( 程序比较小 ),因为任务少而简单,个部门即可( main()函数 )胜任。但是,如果这个公司很大( 大型应用程序 ...
  • Python 入口函数(菜鸟入门

    万次阅读 多人点赞 2018-04-22 22:41:55
    Python入口函数(菜鸟入门) 最近在组内研究专项项目,其中的个现有工具是用 Python 开发的,我的目标是对这款工具的流程进行优化。虽然可以找到对应的开发者了解现有流程,然后结合我的研究提出优化方案,最后...
  • Kotlin入门(9)函数的基本用法

    千次阅读 2017-07-28 09:33:18
    篇文章介绍了Kotlin新增的空安全机制,控制语句部分可算是讲完了,接下来将连续描述Kotlin如何定义和调用函数,本篇文章先介绍函数的基本用法。前面几篇文章介绍控制语句之时,在setOnClickListener里面写了大段...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 188,276
精华内容 75,310
关键字:

一次函数入门