函数声明

function funName(parameter){}

函数表达式,并把函数存储在变量x中

//不用给函数名,后续并不能直接用给定的函数名调用
var x = function(a){return a};
x;//返回的是一个函数对象
x();//调用函数

用函数构造函数定义一个函数(参数, 表达式)

var myFunc = new Function("a", "b", "return a + b");

函数提升:声明会自动提前,赋值的不提升

myFunc(10);
function myFunc(x){return x;}

函数自动调用自己执行

(function callSelf(){alert("i call myself");})();

函数是对象

function myFunc(){};typeof myFunc;//类型为 function

显式参数:形参(类似C++)      隐式参数:实参(类似C++)

参数规则:对隐式参数不进行类型检测,也不进行个数检测

默认参数:如果没有给隐式参数,那么显式参数的值为undefined

function myFunc(x)
{
x = x||0;//若x是undefined,则将其值设为0
}

arguments对象:function的内置属性

function myFunc()
{
var n = arguments.length;//参数的个数
//遍历输出每一个参数
for(var i = 0; i < n; i++)
{
alert(arguments[i]);
}
}

参数传递:按值传递(C++)

//不是对象的是按值传递
var a = 0;
function ma(a){a = 4;}
ma(a);//结果没有变化
//隐式参数是按值传递
var c = [1,2,3];
function mc(){arguments[0] = 3;}
mc(c);//c的值没有变化

参数传递:按引用传递(C++)这个概念有点问题,还要再研究一下

var b = [1,2,3];
//显示参数,且参数是一个对象
function mb(b){b[0]=3;};
mb(b);//b的值发生变化

函数调用,有4种调用方式,区别在于this的初始化

this指向调用函数的对象

//作为一个函数调用
function myFunc()
{
return this;
}
//返回window对象,因为默认属于window全局对象
myFunc();
//作为对象的方法调用
var myObj={
myFunc:function(){return this;}
};
myObj.myFunc();//返回myObj对象:Object {myFun: function}
//用构造函数调用函数,构造函数中的this没有任何值
function myFunction(){return this;}
//this指向实例化后的对象:myFunction{}
var myFunc = new myFunction();
//作为函数方法调用函数
function myFunction(a,b,c){return this;}
//第一个参数myObj会成为this
var a = 0, b = 0, c = 0;
myObj = myFunction.call(myObj, a, b, c);//按参数一个个对应给出
var arr = [0, 0, 0];
myObj = myFunction.apply(myObj, arr);//参数组合成一个数组

js闭包(python中也类似)

可访问上一层函数作用域里变量的函数

var add = (function() {
var counter = 0;
return function() { return counter += 1; };
})();//自调用函数
add();
add();//计数器会递增
var x = function(){return function(){alert("abc");};};
x; //function(){return function(){alert("abc");};};
x(); //function (){alert("abc");}
x()();//会执行alert("abc")

js学习——函数的更多相关文章

  1. JS学习 函数的理解

    ECMAScript 的函数实际上是功能完整的对象. 函数的理解 用 Function 类直接创建函数,格式如下.可理解为Function构造器. var function_name = new Fu ...

  2. 学习js回调函数

    <!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <title> ...

  3. JS学习笔记(三)函数

    js中的方法名一般都是首字母小写,其余单词首字母大写的规范. 声明 function 函数名(参数列表) { // 函数体 return 返回值; } 调用 函数名(); (js中花括号喜欢用这种方式 ...

  4. js学习之函数

    1/.js中函数就是对象. 2/以表达式方式定义的函数一般不要函数名以使代码紧凑. 3/js中函数声明的方式会被默认提到外部脚本或最前面,所以在其定义前的代码也可调用. 然而以表达式方式的则不行. 4 ...

  5. js学习(4) 函数

    JavaScript有三种声明函数的方法 (1)function命令 function print(s) { console.log(s); } (2)函数表达式 1.var print = func ...

  6. js学习之变量、作用域和内存问题

    js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...

  7. 【Knockout.js 学习体验之旅】(3)模板绑定

    本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  8. 【Knockout.js 学习体验之旅】(2)花式捆绑

    本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  9. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

随机推荐

  1. volatile的使用场景

    单词解释: 乱序执行:指CPU对代码的执行顺序进行乱序优化,但保证各执行代码单元的顺序按指令顺序排列.以达到充分利用处理器的各处理单元的目的.(可以理解成:一个任务有不同的执行单元,这些单元之间有一定 ...

  2. mybatis配置文件详解

    这是我看到的博文中最全的一篇了 参见:https://www.cnblogs.com/black-spike/p/7765732.html

  3. 阮一峰:Flex 布局教程

    http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html http://www.ruanyifeng.com/blog/2015/07/flex ...

  4. Java基础_0308:String类的常用方法

    取出指定索引的字符 -- 使用charAt()方法 public class StringDemo { public static void main(String args[]) { String ...

  5. 【译】第七篇 SQL Server安全跨数据库所有权链接

    本篇文章是SQL Server安全系列的第七篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...

  6. fastclick.js插件使用简单说明

    为什么存在延迟? 从点击屏幕上的元素到触发元素的 click 事件,移动浏览器会有大约 300 毫秒的等待时间.为什么这么设计呢? 因为它想看看你是不是要进行双击(double tap)操作.     ...

  7. 使用WebView时软键盘遮挡H5页面解决办法

    简单解决办法:在清单文件中添加 android:windowSoftInputMode="adjustResize" 此举可在软键盘弹出时,重新测量布局,保证不遮挡光标的所在位置. ...

  8. IDEA 启动项目前的配置--或过程遇到的问题

    配置JDK 配置Maven路径和 仓库路径:文件->设置 配置Tomcat Server  文件-->设置 运行时 选择一个tomcat服务器 ==拓展: 本人台式机 的2016版本,因汉 ...

  9. 使用Windows命令行启动关闭服务(net,sc用法)

    下面两个命令最好以管理员方式启动cmd窗口,否则出现权限问题. 1.net用于打开没有被禁用的服务, NET命令是功能强大的以命令行方式执行的工具. 它包含了管理网络环境.服务.用户.登陆大部分重要的 ...

  10. 【NLP CS224N笔记】Lecture 1 - Introduction of NLP

    I. 什么是NLP NLP全称是Natural Language Processing,即自然语言处理,这是一门计算机科学.人工智能以及语言学的交叉学科. NLP涉及的几个层次由下图所示.可以看到输入 ...