javascript高级知识分析——定义函数

代码信息来自于http://ejohn.org/apps/learn/。

可以使用哪些方式来声明函数?

function isNimble(){ return true; }
var canFly = function(){ return true; };
window.isDeadly = function(){ return true; };
console.log(isNimble, canFly, isDeadly);//function isNimble() function canFly() function window.isDeadly()

在这段代码用,我们用了三种方式声明全局函数:

1.isNimble,用的是命名函数。

2.canFly,声明一个匿名函数,把这个函数分配给一个全局变量(用var)。根据函数的本质,可以使用canFly()调用。

3.isDeadly,声明一个匿名函数,把这个函数分配给window对象的属性isDeadly,可以使用window.isDeadly()和Deadly()调用这个函数。

函数声明的顺序是否重要?

var canFly = function(){ return true; };
window.isDeadly = function(){ return true; };
console.log( isNimble() && canFly() && isDeadly()); //true
function isNimble(){ return true; }

当使用命名函数声明时,函数在当前作用域都可以引用。

在哪里分配引用才可以被引用?

console.log( typeof canFly == "undefined","不可以引用" );
console.log( typeof isDeadly == "undefined", "也不可以" );
var canFly = function(){ return true; };
window.isDeadly = function(){ return true; };

当使用声明匿名函数再分配给变量时则不可以。

是否可以在return下面声明函数?

function stealthCheck(){
  console.log( stealth());//true
  return stealth();
  function stealth(){ return true; }
}
stealthCheck();

果然,使用命名声明的函数可以在当前作用域任何地方引用。

时间: 2024-10-04 21:35:11

javascript高级知识分析——定义函数的相关文章

javascript高级知识分析——函数访问

代码信息来自于http://ejohn.org/apps/learn/. 可以通过函数的名字在它的内部引用它. function yell(n){ return n > 0 ? yell(n-1) + "a" : "hiy"; } console.log( yell(4) === "hiyaaaa", "在函数的内部通过它的名字访问它自己" ); 当不通过命名函数来声明时,在其内部如何调用自己? var ninja =

javascript高级知识分析——作为对象的函数

代码信息来自于http://ejohn.org/apps/learn/. 函数和对象是不是非常相似? var obj = {}; var fn = function(){}; console.log( obj && fn );//true var obj = {}; var fn = function(){}; obj.prop = "some value"; fn.prop = "some value"; console.log( obj.prop

javascript高级知识分析——上下文

如果函数是一个对象的属性,那么它可以? var katana = { isSharp: true, use: function(){ this.isSharp = !this.isSharp; } }; katana.use(); console.log( katana.isSharp );//false; 在javascript中,函数的内部,this默认指向调用它的对象.本例katana.use(),函数use被对象katana调用,所以在函数内部,this.isSharp可以操作katan

javascript高级知识分析——实例化

代码信息来自于http://ejohn.org/apps/learn/. new做了什么? function Ninja(){ this.name = "Ninja"; } var ninjaA = Ninja(); console.log( ninjaA, "undefined,ninja并不是实例化" ); var ninjaB = new Ninja(); console.log( ninjaB.name == "Ninja", "

javascript高级知识分析——灵活的参数

代码信息来自于http://ejohn.org/apps/learn/. 使用数量可变的参数对编程很有好处 function merge(root){ for(i = 0 ; i < arguments.length; i++) for(var key in arguments[i]) return root[key] = arguments[i][key] } var merged = merge({name: "John"}, {city: "Boston"

javascript中两种定义函数方式的差别以及函数的预编译效果

我们知道在javascript中定义函数的方式有以下两种: function mm(){ } 这种形式是声明一个函数,跟 var 声明一个变量机制一样,脚本在解释执行之前会做预编译处理. var mm = function(){ } 这种形式是对一个变量赋值,虽然也做预编译,但仅仅只是给 mm 事先变量分配一个内存空间,而没有做初始化. 代码1: alert(a);//打印函数a的内存 alert(b);//undefined alert(c);//JS报错:"c"未定义 functi

Javascript基础知识盲点总结——函数

一.函数中的arguments对象 每个函数内部都有一个arguments,它能返回函数所接受的所有参数 注意:argumens接收的是实参 如下是利一个利用arguments特性编写的求和函数: function sumOnSteroids(){ var I, res = 0; var number_of_params = arguments.length; for(I = 0; I < number_of_params; i++){ res += arguments[i]; } return

读javascript高级程序设计16-几条函数小技巧

内容概要 作用域安全的构造函数 惰性载入函数 函数绑定 函数节流 一.作用域安全的构造函数 我们知道,当使用new操作符调用构造函数时,构造函数内部的this会指向新创建对象的实例. function Person(name){ this.name=name; } var p=new Person('peter'); console.log(p.name);//结果:perter 但是,如果没有使用new操作符,而是将构造函数当作普通函数调用时,this会指向window对象. var p1=P

JavaScript的高级知识---词法分析

JavaScript的高级知识---词法分析 词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 函数在运行的瞬间,生成一个活动对象(Active Object),简称AO 分析参数 具体步骤如下: 函数接收形式参数,添加到AO的属性,并且这个时候值为undefine,例如AO.age=undefine 接收实参,添加到AO的属性,覆盖之前的undefine 分析变量声明,如var age;或var age=23