本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘

函数

几个要点:

                a).函数是javascript中的一等公民 (重要性)
                b).函数是一个对象
                c).函数定义了一个独立的变量作用域

定义方式

a)命名函数:

          除非在另一个函数内部定义,否则,命名函数是全局的。

                 // 全局的命名函数
function add(x, y) {
return x + y;
}
console.info(add(, )); //

b)匿名函数:

匿名函数通常赋值给一个变量,再通过变量调用。

        var func = function (x, y) {
return x + y;
}
console.info(func(5, 2)); //

匿名函数适用于以下这种 “立即执行的匿名函数” 的情况:

        console.info(
function (x, y) {
return x + y;
}(100, 200) //立即调用
);

C)定义方式影响代码执行效果

                命名函数可以先使用,再定义

        console.info(sum(10, 10));
function sum(num1, num2) {
return num1 + num2;
}

匿名函数必须先定义,再使用

        //console.info(sumFunc(10, 10));    //Uncaught TypeError: Property 'sumFunc' of object [object Object] is not a function
var sumFunc = function (num1, num2) {
return num1 + num2;
};
console.info(sumFunc(10, 10));

函数返回值:

用return 生成返回值.如没有return ,则函数返回undefined

         function func() {
}
console.info(func()); //undefined
function func2() {
return; //空的返回语句
}
console.info(func2()); //undefined

return里藏着的坑:

             var func = function (x, y) {
var sum = x + y;
return {
value : sum
}
}

这么写没有问题:   调用 func(5,5)    返回的是 Object {value: 10}

然而:

         var func = function (x, y) {
var sum = x + y;
return
{
value: sum
};
}
console.info(func(5,5)); //undefined
                   return 后面跟着个回车换行的话,
                   调用 func(5,5)    显示的是 undefined
                   编辑器帮我们在return后加了个分号;   然而在这情况下并没有什么卵用。
 

函数即对象:

         function add(x, y) {
return x + y;
}
console.info(add(100, 200)); //
var other = add; //other和add引用同一函数对象
console.info(other(300, 400)); //
console.info(typeof other); //function
console.info(add === other); //true

嵌套定义的函数:

                  在函数内部,可以定义另一个函数。

         function outerFunc(a, b) {
function innerFunc(x) {
return x * x;
}
return Math.sqrt(innerFunc(a) + innerFunc(b));
}
console.info(outerFunc(3, 4)); //

访问外部变量:

             内部函数可以访问外部的变量与参数。
 1         var globalStr = 'globalStr';
function outerFunc2(argu) {
var localVar = 100;
function innerFunc2() {
localVar++;
console.info(argu + ":" + localVar + ":" + globalStr);
}
innerFunc2(); //hello:101:globalStr
}
outerFunc2("hello");

返回函数的函数:

因为函数是对象,所以可以作为返回值。

             function outerFunc(x) {
var y = 100;
return function innerFunc() {
console.info(x + y);
}
}
outerFunc(10)(); //

Javascript我学之二函数定义的更多相关文章

  1. JavaScript要点 (五) 函数定义

    JavaScript 使用关键字 function 定义函数. 函数可以通过声明定义,也可以是一个表达式. 函数声明分号是用来分隔可执行JavaScript语句. 由于函数声明不是一个可执行语句,所以 ...

  2. JavaScript入门学习之二——函数

    在前一章中讲了JavaScript的入门语法,在这一章要看看函数的使用. 函数的定义 JavaScript中的函数和Python中的非常类似,只不过定义的方式有些不同,下面看看是怎么定义的 //定义普 ...

  3. Kotlin(二) 函数定义

    1.不带参数,不返回值的函数 fun sum(){} 2.带参数,不带返回值的函数 fun sum(a:Int){} 3.带参数,带返回值的函数 fun sum(a:Int,b:Int) : Int{ ...

  4. 深入理解javascript函数定义与函数作用域

    最近在学习javascript的函数,函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数.本人把思路整理成文章,一是为了加深自己函数的理解,二是给读者提供学习的途径 ...

  5. JavaScript权威设计--命名空间,函数,闭包(简要学习笔记十二)

    1.作为命名空间的函数 有时候我们需要声明很多变量.这样的变量会污染全局变量并且可能与别人声明的变量产生冲突. 这时.解决办法是将代码放入一个函数中,然后调用这个函数.这样全局变量就变成了 局部变量. ...

  6. JavaScript函数定义和调用 变量作用域

     本文是笔者在看廖雪峰老师JavaScript教程时的个人总结   JavaScript中函数定义可以是这样的格式 function 函数名(参数) {     函数体 } 也可以是这样的格式     ...

  7. JavaScript函数定义 ,参数调用

    一.JavaScript函数函数: 函数就是一种封装,由事件驱动的或者当它被调用时执行的可重复使用的代码块.定义函数:function 函数名(){函数体;}数不会自动执行,需要被调用才可以执行函数名 ...

  8. Javascript异步编程之二回调函数

    上一节讲异步原理的时候基本上把回掉函数也捎带讲了一些,这节主要举几个例子来具体化一下.在开始之前,首先要明白一件事,在javascript里函数可以作为参数进行传递,这里涉及到高阶函数的概念,大家可以 ...

  9. 【Python基础学习二】定义变量、判断、循环、函数基本语法

    先来一个愉快的Hello World吧,就是这么简单,不需要写标点符号,但是需要严格按照缩进关系,Python变量的作用域是靠tab来控制的. print("Hello World" ...

随机推荐

  1. Feature Pyramid Networks for Object Detection比较FPN、UNet、Conv-Deconv

    https://vitalab.github.io/deep-learning/2017/04/04/feature-pyramid-network.html Feature Pyramid Netw ...

  2. 修改host,上github

    操作如下: 1.http://ping.chinaz.com/ 搜索github.com 海外ip,其实能找到的就两个;然后再搜gist.github.com 海外ip,也是两个. 192.30.25 ...

  3. [模板] 多项式: 乘法/求逆/分治fft/微积分/ln/exp/幂

    多项式 代码 const int nsz=(int)4e5+50; const ll nmod=998244353,g=3,ginv=332748118ll; //basic math ll qp(l ...

  4. Bugku 杂项 眼见非实

    把文件放进Kali中可以看到这是一个zip文件,解压后得到一个docx,继续翻 (在windows中是打不开的 在word/document.xml中可以找到flag

  5. Python future使用

    Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动.有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了. 从Python 2.7到Pytho ...

  6. Vue——报错总结

    [Vue warn]: Cannot find element: #app [报错原因] 1. 把对应js放在了head标签里面,页面没有加载完成就进行渲染,导致找不到#app. 2.加了<te ...

  7. yii2 redirect重定向

    redirect使用方法 $this->redirect(array('/site/contact','id'=>12)); //http://www.kuitao8.com/testwe ...

  8. Elasticsearch6.5.2 X-pack破解及安装教程

    先正常安装 elasticSearch, kibana. 1. 如果是6.5.2版本,可以直接下载jar文件:https://download.csdn.net/download/bigben0123 ...

  9. Go-常用库的介绍

    一.Go常用包介绍  fmt.它实现了格式化的输入输出操作,其中的fmt.Printf()和fmt.Println()是开 发者使用最为频繁的函数.  io.它实现了一系列非平台相关的IO相关接口 ...

  10. usb驱动程序小结(六)

    title: usb驱动程序小结 tags: linux date: 2018/12/20/ 17:59:51 toc: true --- usb驱动程序小结 linux中为usb驱动也提供了一套总线 ...