window.onload = function() {
// console.log('ok');
//正规的创建函数
function test(abc, d) {
return abc(d);
} function jack(testString) {
console.log(testString);
}
test(jack, 'jackjones');
test(jack, '我是Jack,您好!');
//通过Function()创建函数
var b = new Function('x,y', 'return x+y');
console.log(b(5, 2));
//创建匿名函数
var c = function() {
console.log('我是您名函数!请问你是么?');
}
c(); //调用匿名函数
var d = null;
if(7 > 8) {
d = function() {
console.log('7>8');
}
} else {
d = function() {
console.log('7<8');
}
}
// console.log(d);
d(); function testfor() {
for(var i = 0; i < arguments.length; i++) {
console.log(i);
}
for(var i = 0; i < 5; i++) {
console.log(i);
}
}
testfor(1, 2, 3, 4, 5, 6, 7, 8);
console.log('======================='); //普通的递归函数的写法
function digui(num) {
if(num == 1) {
return 1;
} else {
return num * digui(num - 1);
}
}
console.log(digui(4)); //調用遞歸函數
//使用arguments.calle方法實現遞歸方法
function digui_num(num) {
if(num == 1) {
return 1;
} else {
return num * arguments.callee(num - 1);
}
}
var OtherDIgui = digui_num;
digui = null;
console.log(OtherDIgui(4));
//this的使用方法
color = 'yellow' function TestColor() {
var color = 'red';
console.log(this.color); //這裡的this指向的是window對象
} function TestColor_Test1() {
var color = 'red';
console.log(color); //這裡沒有加this表示從函數裡面網外面找
} function TestColor_Test2() {
var color = 'black'; function test2() {
var color = 'test2color'; function test1() {
var color = 'test1color';
return color;
}
return test1();
}
return color;
}
TestColor();
TestColor_Test1();
console.log('==========================');
TestColor_Test2();
//閉包的使用方法研究
function bibao() {
var fontsize = '微軟雅黑';
return function bibao1() {
var fontsize = '行書';
return fontsize;
}
} function bibao1() {
var jack = 'jack';
return function() {
console.log(jack);
}
}
//調用閉包的匿名函數
var p = bibao1();
p();
//調用非匿名函數的內部函數
console.log(bibao()()); function bibao2() {
var n = 100; function fn() {
return n;
}
return fn; //將函數的指針作為函數返回
}
console.log(bibao2()());
console.log('-========')
//閉包實現累加功能
function fn1() {
var n = 1;
add = function() {
n += 1;
} function fn2() {
n += 1;
console.log(n);
}
return fn2;
}
var resule = fn1();
resule();
resule();
resule();
resule();
resule();
//研究JavaScript閉包中的this含義
var obj = {
testname: 'jack',
fun: function() {
var testname = 'funTest';
console.log(this.testname); //此處訪問到的name為obj的值
return function InnerFun() {
console.log(this.testname); //此處的testname的值為Window的值,所以打印出來為undeifined
};
},
addr: '上海市徐匯區',
fn: function() {
var age = 100;
var t = this;
return function() {
console.log(t.testname); //將this進行轉換
}
}
}
var pp = obj.fun();
console.log(obj.addr);
pp(); //undefined
var b = obj.fn();
b(); //jack
//創建匿名函數
var n = function() {
console.log('ok');
}
n(); //匿名函數的調用
//創建自動執行的函數
(function() {
console.log('我是自動執行函數');
})();
//使用function創建函數
var f = new Function('x,y', 'console.log(x*y)');
f(10, 10);
}

创建JavaScript函数的几种方式的更多相关文章

  1. 创建javascript对象的几种方式

    ECMAScript提供的对象有:String.Date.Array.Boolean.Math.Number.RegExp.Global 程序中需要用到很多自定义的js对象 1.直接创建 var ob ...

  2. JavaScript创建函数的三种方式

    ㈠函数(function) ⑴函数也是一个对象 ⑵函数中可以封装一些功能(代码),在需要时可以执行这些功能(代码) ⑶函数中可以保存一些代码在需要的时候调用 ⑷使用typeof检查一个函数对象时,会返 ...

  3. 第十篇----------javascript函数的三种定义方式及区别

    javascript定义函数有3种方式: //3种函数定义方式,前两种常用 /** * 1,function 语句式 * 形式:句子 * 名称:有名 * 性质:静态 * 解析时机:优先解析 * 作用域 ...

  4. JS创建对象,数组,函数的三种方式

    害怕自己忘记,简单总结一下 创建对象的3种方法 ①:创建一个空对象   var obj = {}; ②:对象字面量 var obj = { name: "Tom", age: 27 ...

  5. JavaScript 函数的4种调用方法

    JavaScript 函数有 4 种调用方式. 每种方式的不同方式在于 this 的初始化. 作为一个函数调用 function myFunction(a, b) { return a * b; } ...

  6. JavaScript 创建对象的七种方式

    转自:xxxgitone.github.io/2017/06/10/JavaScript创建对象的七种方式/ JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以 ...

  7. JavaScript创建对象的几种 方式

    //JavaScript创建对象的七种方式 //https://xxxgitone.github.io/2017/06/10/JavaScript%E5%88%9B%E5%BB%BA%E5%AF%B9 ...

  8. (转)DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的两种方式(dllexport与.def文件)http://www.cnblogs.com/enterBeijingThreetimes/archive/2010/08/04/1792 ...

  9. 【转】DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的两种方式(dllexport与.def文件) DLL中导出函数的声明有两种方式: 一种方式是:在函数声明中加上__declspec(dllexport):另外一种方式是:采用模块定义 ...

随机推荐

  1. django之注册登录

    清理session数据,自此django的认证登陆登出功能完成,但是此处有个问题,就是当用户在手动关闭浏览器的时候,session数据不会自动失效,数据库的session数据也不会自动删除,所以需要在 ...

  2. xcode9.4 报错 error:The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

    原因 http | https 协议  不能正常使用 找到的解决方案 但是在字段名上有了变化,不过复制进去 还是会自动选择对应的 解决办法 1. 在Info.plist中添加 App Transpor ...

  3. websocket的子协议stomp协议

    stomp协议Spring实现 服务器注册EndPoint 用来与客户端建立websocket连接 websocket连接的建立应该与客户端与服务器之间的通道无关 jdk中 javax下的websoc ...

  4. CentOS安装svn(subversion)版本管理

    yum -y install subversion svnadmin create /svn/repository cd /svn/repository/conf ll  查看文件-rw-r--r-- ...

  5. MyEclipse和eclipse生成变量快捷键

    MyEclipse和eclipse生成变量快捷键MyEclipse和eclipse生成变量快捷键 一.MyEclipse快捷生成变量(两种):第一种: 光标放在该行的任意位置,按 Ctrl+2,会弹出 ...

  6. faiss索引基于数量级和内存限制的选择

    它是一个能使开发者快速搜索相似多媒体文件的算法库.而该领域一直是传统的搜索引擎的短板.借助Faiss,Facebook 在十亿级数据集上创建的最邻近搜索(nearest neighbor search ...

  7. nginx warn an upstream response is buffered to a temporary file /var/cache/nginx/proxy_temp/ while reading upstream

    最近管理的nginx发现大量的error log,log内容如下: an upstream response is buffered to a temporary file /var/cache/ng ...

  8. Mysql出现(10061)错误提示的暴力解决办法

    上个月我还在说别人的怎么老是会错呢,我的就没事,嘿 今天就轮到我了 我发誓 我绝对没碰它 是它先动的手 言归正传   下面给你们 介绍 终极大招  为什么是终极大招呢  因为网上那些前辈们的方法我都试 ...

  9. webconfig标签收集

    在web项目启动时,很多因为vs没有报错,而页面跑不出来的情况,无法调试找到错误, 可以在webconfig中添加一个标签,运行项目就可以在页面显示错误 <customErrors mode=& ...

  10. Navicat Premium 12注册机使用教程

    来看下软件具体的安装.激活图文教程: 1.首先下载后正常安装软件至结束: 这时候如果打开的话,是提示要注册的 2.以管理员身份运行注册机工具 Navicat_Keygen_Patch[vxia.net ...