2014年11月10日

1。JavaScript函数具有两个特点: 函数是第一类对象    函数能够提供作用域

        函数即对象,表现为:
        -1,函数能够在执行时动态创建,也能够在程序执行过程中创建。

        -2,函数能够分配给变量,能够将它们的引用拷贝到其它变量,能够被扩展,此外,函数还能够被删除。

        -3。能够做为參数传递给其它函数,,还能够由其它函数返回。
        -4,函数能够有自己的属性和方法。

2。声明VS表达式:名称和变量声明提升
    
//这是一个函数表达式
//它做为一个參数传递给函数 CallMe
callMe(function(){
//这是命名函数表达式
//也被称作匿名函数
});
//这是命名函数表达式
callMe(function me(){
//这里是命名函数表达式
//而且其名称为me
});
//还有一个函数表达式
var myobject = {
say:function(){
//这里是函数表达式
}
};
3,函数的提升
        对于全部的变量,无论在函数体的何处声明。都会在后台被提升到函数顶部。
4,回调模式
     
<script>
function writeCode(callBack){
console.log("callBanck before.....");
callBack();
console.log("callBanck after.....");
}
 
function callBack(){
console.log("callBanck ..........");
}
writeCode(callBack);
  </script>
//输出结果
        callBanck before..... test1.html:14
     callBanck .......... test1.html:21
callBanck after.....
 例如以下。展示了一个复杂的查询DOM节点,然后再在回调函数中依次进行业务处理。

耗时为2n
 
<script>
//查找节点
var findNodes = function(){
var i = 100000,//复杂循环
   nodes[],//存储本次执行结果
found;//零时存储找到的节点
while(i){
//业务逻辑处理
//....
found = 1;
i -= 1;
nodes.push(found);
}
return nodes;
};
//对节点处理 
var hide = function(nodes){
var i = 0, max = nodes.length;
for(; i < max; i += 1){
//复杂业务逻辑处理
console.log(nodes[i]);
}
};
 
//执行函数
hide(findNodes());
  </script>
 
 
  <script>
var findNodes = function(callBack){
var i = 10000, 
nodes = [],
dound;
//检查回调函数是否为可调用
if(typeof callBack != "function"){
callBack = false;
}
 
while(i){
i -= 1;
 
//逻辑处理 。 。 。 。。。。 。
 
//执行回调函数
if(callBack){
callBack(found);
}
nodes.push[found];
}
return nodes;
};
 
var hide = function(node){
//对node节点进行相应的业务处理
};
 
findNodes(hide);
  </script>

5。闭包
    闭包特性,简而言之就是作用域。
6,自己定义函数
    -1。假设一个函数又一次定义,则会覆盖原有函数。

     var scareMe = function(){
console.log("FIRST!");
scareMe = function(){
console.log("SECOND!");
};
};
     scareMe();
 scareMe();
输出结果:
日志: FIRST! 
日志: SECOND!

该模式的确定是。当他重定义自身时。已经加入到原始函数的不论什么属性都会丢失。此外,假设该函数使用了不同的名称,比方分配给不同的变量或者以对象的方法来使用,那么重定义的部分将永远不会发生,而且将会仅仅i系那个原始函数体。

<script>
var scareMe = function(){
console.log("FIRST!");
scareMe = function(){
console.log("SECOND!");
};
};
//加入新的属性
scareMe.property = "property";
//赋值给还有一个不同名称的变量
var prank = scareMe;
 
//在一个方法里使用
var spooky = {
boo: scareMe
};
 
prank();// first
prank();//first
console.log(prank.property);//property
 
spooky.boo();//first
spooky.boo();//first
console.log(spooky.boo.property);//property
 
//使用自己定义函数
scareMe();//second
scareMe();//second
console.log(scareMe.property);//undefined
 
 
</script>
输出结果:
FIRST! test5.html:14
property test5.html:332
FIRST! test5.html:14
property test5.html:372
SECOND! test5.html:17
undefined
7。即时函数
    即时函数,定义函数后马上运行该函数的语法。样例例如以下:
    
(function(){
alert("One");
}());
该模式由下面部分组成:
    -1。能够使用函数表达式定义一个函数。
    -2。在末尾加入一组括号。这将导致该函数马上运行。

   -3。将整个函数包装在括号里。

该模式一般用于初始化时候。运行一些页面载入的任务。在初始化完毕后就不须要这些变量。能够全然替代以全局变量形式创建的代码。

例如以下代码就不会创建过多的全局变量。

  
<script>
     (function(){
var days = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'],
today = new Date(),
msg = "Today is " + days[today.getDay()] + "," + today.getDate();
alert(msg);
}());
 
  </script>

即时函数的參数
 (function(who, how){
console.log("i'm " + who + ",I'm " + how);
}("pengke", "shabi"));
即时函数的返回值,例如以下代码。result指向函数的返回值4。
var result = (function(){
return 2 +2 ;
})();
8。函数属性——备忘模式
    能够对函数的參数进行缓存处理 
9,配置对象
    适用于一个方法,我们不确定它有多少个參数的情况。
    -1,不须要记住众多的參数以及其顺序。
    -2,能够安全忽略可选參数
    -3,更加易于阅读和维护
    -4,更加易于加入和删除參数

<script>
function addPerson(conf){ console.log(conf.first);
console.log(conf.second);
console.log(conf);
}
var conf = {first: "abc",
second: "a",
third: "c"}; addPerson(conf); </script>
10。函数应用
        能够用法Function.prototype.apply().
       
  <script>
//定义函数
var sayHi = function(who){
console.log("Hello " + (who ? "," + who : "") + "!");
};
sayHi();
sayHi('world');
sayHi.apply(null, ["world"]);
  </script>
运行结果
Hello ! test10.html:15
Hello ,world! test10.html:15
Hello ,world! 
  apply第一个參数制定该函数内部的this。

  当传递函数相应的时候。第一个參数不能为空,必须为函数名称。
11,Curry化
      
<script>
//curry化的add函数
function add(x, y){
var oldx = x, oldy = y;
if(typeof oldy == "undefined"){
return function(newy){
console.log(oldx + newy);
};
}
 
console.log(x + y);
}
 
console.log(typeof add(5));//function
add(3)(4);//7
 
var add2000 = add(2000);
add2000(10);//2010
  </script>












JavaScript模式读书笔记 第4章 函数的更多相关文章

  1. JavaScript模式读书笔记 文章3章 文字和构造

    1.对象字面量     -1.Javascript中所创建的自己定义对象在任务时候都是可变的.能够从一个空对象開始,依据须要添加函数.对象字面量模式能够使我们在创建对象的时候向其加入函数.       ...

  2. C++ primer plus读书笔记——第8章 函数探幽

    第8章 函数探幽 1. 对于内联函数,编译器将使用相应的函数代码替换函数调用,程序无需跳到一个位置执行代码,再调回来.因此,内联函数的运行速度比常规函数稍快,但代价是需要占用更多内存. 2. 要使用内 ...

  3. C++ primer plus读书笔记——第7章 函数——C++的编程模块

    第7章 函数--C++的编程模块 1. 函数的返回类型不能是数组,但可以是其他任何一种类型,甚至可以是结构和对象.有趣的是,C++函数不能直接返回数组,但可以将数组作为结构或对象的组成部分来返回. 2 ...

  4. 【javascript dom读书笔记】 第九章 CSS-DOM

    用dom设置样式 element.style.property = value 何时用dom脚本设置样式 作者写到:绝大多数的现代浏览器,虽然对css伪类的支持不是很完整,但是对dom都有良好的支持, ...

  5. 《C和指针》 读书笔记 -- 第7章 函数

    1.当程序调用一个无法见到原型的函数时,编译器便认为该函数返回一个整型值.如果这个值实际上是非整型值时,还得执行类型转换,所以函数原型声明有时很重要. 2.值的类型并不是值的内在本质,而是取决于它被使 ...

  6. 《C++ Primer Plus 6th》读书笔记 - 第8章 函数探幽

    1. 摘录 默认参数指的是当函数调用中省略了实参时自动使用的一个值. 默认参数并非编程方面的重大突破,而只是提供了一种便捷的方式.使用默认参数,可以减少要定义的析构函数.方法以及方法重载的数量. 试图 ...

  7. 《C++ Primer 4th》读书笔记 第7章-函数

    原创文章,转载请注明出处:http://www.cnblogs.com/DayByDay/p/3912413.html

  8. 《Linux内核分析》读书笔记(四章)

    <Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...

  9. SQL Server2012 T-SQL基础教程--读书笔记(1-4章)

    SQL Server2012 T-SQL基础教程--读书笔记(1-4章) SqlServer T-SQL 示例数据库:点我 Chapter 01 T-SQL 查询和编程背景 1.3 创建表和定义数据的 ...

随机推荐

  1. Java_注解之一

    注解可以替换复杂的hbm.xml文件,使得程序的开发大大简化 @Override    :子类重写父类方法 @Test :junit测试 @Before :测试之前执行 @SuppressWarnin ...

  2. Android 自己搭建一个直播系统吧

    服务端用 SRS(Simple Rtmp Server),在这里下载simple-rtmp-server需要Linux系统最好是Ubuntu,装个Ubuntu虚拟机就行了在Linux里,解压缩SRS ...

  3. Redux 基础概念

    Redux is a predictable state container for JavaScript apps.,亦即 Redux 希望能提供一个可以预测的 state 管理容器,让开发者可以可 ...

  4. 定制UVM Messages(参考)

    UVM的Messages机制有些时候很繁琐,很多时候希望能够在UVM messages的基础上做一些个人化的订制,这里给出来一个找到的例子作为参考. my_macros.sv:    `define ...

  5. html5——动画案例(太阳系)

    太阳系主要利用定位,伪元素 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  6. CSS学习笔记----选择器

    用过css的同志们都知道,选择器是非常重要的,如果选择器使用不当,即使你的css写的再好,但是不知道要用在哪个元素上,这不是英雄无用武之地吗? css,用过的都说好! 最基本的选择器,id选择器,类选 ...

  7. 【译】x86程序员手册17-第6章保护

    Chapter 6 Protection 第六章 保护 6.1 Why Protection? 为什么要保护? The purpose of the protection features of th ...

  8. 如何在linux搭建airtest+chromeweb测试环境--(用命令行运行.air脚本)

    大前堤: 如果你需要airtest提供的可视化测试报告,那你的操作系统,一定要有图形化界面. 否则运行你的airtest脚本 会遇到这样的问题 Xlib.error.DisplayNameError: ...

  9. 网络爬虫 robots协议 robots.txt

    网络爬虫 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上 ...

  10. Django - 数据获取

    Django - 数据获取 1.radio值获取 2.checkbox获取 3.select 获取 select 获取值,需要根据前端multiple来获取,get or getlist; 4.上传文 ...