`
jswing
  • 浏览: 10946 次
社区版块
存档分类
最新评论

JavaScript笔记(二)

阅读更多

 

这篇记录函数的用法

标准函数定义:

    function sum(a, b) { 

var c = a + b; 

return c;

}

其中a和b叫做函数的参数,函数体内return c是将c作为返回值(如果没有显式的return,默认返回undefined),虽然函数只声明了两个参数,实际上调用的时候可以传入任意数量的参数,比如:sum(1,2,3,4,5),每个函数都会默认创建一个arguments变量,类似一个数组,可通过下标访问所有的参数

 

预定义的函数:

下面这些函数都是黑盒,无法查看内部实现代码

parseInt()

尝试把任意类型转换成整数,如果转换失败,返回NaN

一些示例:

parseInt('123') >>>123

parseInt('abc123') >>>NaN

parseInt('1abc23') >>>1

parseInt('123abc') >>>123

 

第二个参数表示进制

parseInt('FF', 10) >>>NaN

parseInt('FF', 16) >>>255 //十六进制

parseInt('0377', 10) >>>377

parseInt('0377', 8) >>>255 //八进制

 

对于0开头的字符串,parseInt会默认把它当成8进制转换,如:

parseInt('0377') >>>255

对于0x开头的字符串,parseInt会默认把它当成十六进制进行转换,如:

parseInt('0x377') >>>887

 

parseFloat()

尝试把参数转换成小数,只有1个参数,转换失败会返回NaN

区别:

parseInt("1.9")>>>1    parseFloat("1.9")>>>9

parseInt("1e2")>>>1    parseFloat("1e2")>>>100

parseFloat('1.23abc.00')>>>1.23

parseFloat('a.bc1.23') >>>NaN

 

isNaN()

判断参数是不是数字,如果不是数字,返回false,可以用来判断parseInt和parseFloat是否转换成功。

isNaN(NaN) >>>true

isNaN(123) >>>false

isNaN(1.23) >>>false

isNaN(parseInt('abc123')) >>>true

这个函数会尝试转换参数:

isNaN('1.23') >>>false

isNaN('a1.23') >>>true

isNaN('1px')>>>true //严格匹配,parseInt和parseFloat可以转换,但isNaN不认为它是个数字

因为NaN==NaN返回false,所以这个函数非常有用。

 

isFinite()

判断参数是一个数字,而不是Infinity或NaN

isFinite(Infinity) >>>false

与isNaN类似,它也会尝试转换字符串

isFinite("0">>>true

 

 

encodeURI() /encodeURIComponent() decodeURI() /decodeURIComponent() 

encodeURI会把参数当作一个完整的URI字符串处理

encodeURIComponent()会把参数当作URI的一部分,比如查询部分,所以所有的特殊字符都会被encode

 

eval()

将参数当作一段javascript执行,不建议使用,会有性能和安全问题

 

 

 

变量作用域

js中没有块作用域(不同于java),只有函数作用域和全局作用域

在函数内部定义的变量只有函数内或此函数的私有函数能访问,外部不能访问,如:

    var global = 1;

    function f() { 

var local = 2; 

global++; 

return global;

}

global是全局的,在f内也可以访问,但是local是在f内定义的,不能被外部访问

 

注意,如果不小心丢掉了var关键字,local会被分配为全局变量

 

 

函数内的变量声明会覆盖全局声明:

var a = 123;

function f() { 

alert(a); //undefined

var a = 1; 

alert(a); //1

    f(); 

 

 

 

 

函数也是数据(变量),两种定义方式:

    function f(){return 1;} //函数声明

var f = function(){return 1;} //函数表达式

typeof f>>>"function"

完全可以把函数当作普通变量处理,让一个新变量指向它,当作参数传递,当作返回值,或者干脆delete f

 

匿名函数:

~function(a){alert(a)}(1);//定义一个匿名函数并马上执行它

 

私有函数

    function a(param) { 

function b(theinput) { 

return theinput * 2; 

}; 

return 'The result is ' + b(param);

};

其中b就是一个private function

或者用函数表达式的方式:

    var a = function(param) { 

  var b = function(theinput) { 

return theinput * 2; 

}; 

return 'The result is ' + b(param);

};

 

 

综合应用,重写自己:

function a() { 

alert('A!'); 

a = function(){ 

alert('B!'); 

};

    }

只有第一次执行a时才会alert('A!'); 适合做一些只做一次的初始化工作

 

或者:

var a = function() { 

function someSetup(){ 

var setup = 'done'; //马上会被执行,因为函数最后有一对小括号

function actualWork() { 

alert('Worky-worky'); 

someSetup(); 

return actualWork;

    }();

 

闭包

关于闭包的概念,网上有很多介绍的很多,在这不解释意义了,来几个例子,加深印象:

1、

function f(){ 

var b = "b"; 

return function(){ 

return b; 

}

    }

想在外部访问f的内部变量b,可以:

var n=f();

var b=n();

或者:

var n;

function f(){ 

var b = "b"; 

n = function(){ //n在外部声明

return b; 

}

    }

 

2、

function f(arg) { 

var n = function(){ 

return arg; 

}; 

arg++; 

return n;

    }

var m = f(123);

m();//结果是124

 

3、

function f() { 

var a = []; 

var i; 

for(i = 0; i < 3; i++) { 

a[i] = function(){ 

return i; 

return a;

    }

var a = f();

a[0]()=3,a[1]()=3,a[2]()=3

修正一下:

function f() { 

var a = []; 

var i; 

for(i = 0; i < 3; i++) { 

a[i] = (function(x){ 

return function(){ 

return x; 

})(i); 

return a;

    }

var a = f();

a[0]()=0,a[1]()=1,a[2]()=2

 

或者:

function f() { function makeClosure(x) { return function(){ return x; } } var a = []; var i; for(i = 0; i < 3; i++) { a[i] = makeClosure(i); } return a; }

 
分享到:
评论

相关推荐

    黑马JavaScript笔记二.md

    黑马JavaScript笔记二.md

    javascript笔记 javascript笔记

    根据提供的文件信息,我们可以归纳出以下几个JavaScript相关的知识点: ### JavaScript基础用法 #### 内联JavaScript 内联JavaScript指的是在HTML元素中直接嵌入JavaScript代码的方式。这种方式常见于`&lt;a&gt;`、`...

    狂神说系列 JavaScript笔记

    【狂神说系列 JavaScript笔记】是一份全面且深入的JavaScript学习资源,旨在帮助开发者和初学者深入理解这门广泛应用于Web开发的脚本语言。这份笔记涵盖了JavaScript的基础语法、核心概念以及高级特性,旨在构建一个...

    李立超JavaScript基础篇笔记

    JavaScript,简称JS,是由Brendan Eich在1995年创造的一种高级编程语言,最初目的是为了增强网页的交互性,特别是在前端进行表单验证。JavaScript不是Java的子集,两者之间没有直接关联。JS起初名为LiveScript,但在...

    javascript笔记

    javascript入门笔记包括javascript简介、javascript语法、javascript流程控制、函数、数组等

    韩顺平Javascript笔记完整版.pdf

    韩顺平Javascript笔记完整版.pdf ,配合视频看效果比较好

    菜鸟的Javascript笔记.rar

    这个菜鸟的笔记里面没有谈到JavaScript中的对象,比如说时间对象和字符串对象,这些内容可以在“菜鸟的JavaScript对象笔记”中找到。不过因为小菜鸟个人认为HTML DOM比其它的JavaScript对象更常用一些(不过这可不...

    html+css+javascript笔记完整版

    "html+css+javascript笔记完整版"是一份全面的前端学习资源,涵盖了从基础到进阶的HTML、CSS和JavaScript知识。通过深入学习,你可以掌握创建交互式、响应式网页所需的所有技能,并为进一步探索前端开发的广阔领域...

    个人Javascript学习笔记 精华版

    个人Javascript学习笔记 精华版 本资源为个人Javascript学习笔记的精华版,涵盖了Javascript的基础知识、事件处理、对象和系统函数、浏览器对象等方面的内容。下面是对每个知识点的详细说明: 1. 什么是JavaScript...

    《李炎恢Javascript笔记》+源码

    《李炎恢Javascript笔记》是一本深入浅出的JavaScript学习资料,它涵盖了JavaScript的基础到实践应用的诸多方面。这本书的特点是将复杂的编程概念分解为易于理解的小知识点,并且提供了源码示例,使得读者能够更好地...

    JavaScript笔记.md

    JavaScript笔记

    JavaScript笔记第一章—课程准备.pdf

    `prompt()`函数用于显示一个对话框,提示用户进行输入,可以有两个参数,第一个是对话框中显示的纯文本,第二个是默认的输入文本。`alert()`函数用于弹出一个警告框,显示一条指定消息。`document.write()`函数用于...

    JavaScript笔记

    这份笔记是对JavaScript基础知识的总结,内容丰富且覆盖了JavaScript编程的多个核心方面,适合初学者作为入门参考或对有经验的开发者作为复习材料。在实际使用JavaScript开发中,理解和掌握这些知识点是非常重要的,...

    JavaScript 笔记

    本笔记将深入探讨JavaScript的基本概念、脚本位置、外部引用以及Date对象的使用。 首先,理解JavaScript脚本在HTML文件中的放置位置至关重要。通常,JavaScript可以放在HTML文档的`&lt;head&gt;`或`&lt;body&gt;`部分。当脚本...

    韩顺平javascript笔记(最全整理 dom编程 oop 基础语法)

    韩顺平老师的JavaScript笔记全面涵盖了基础语法、面向对象编程以及DOM编程,这些都是学习JavaScript时至关重要的知识点。 首先,基础语法是JavaScript学习的基石。包括变量声明(var、let、const)、数据类型(如...

    javascript 笔记 适合初学者 jquery chm 资料

    这份"javascript笔记"可能是作者根据自己的学习和实践整理而成,对初学者来说是非常宝贵的资源。笔记中可能涵盖了变量声明、数据类型(如字符串、数字、布尔值、对象、数组等)、运算符、流程控制(如条件语句和循环...

    第二天JavaScript笔记总结

    第二天JavaScript笔记总结

    javascript学习笔记整理知识点整理

    这份“javascript学习笔记整理知识点整理”是针对初学者的一份宝贵资料,涵盖了JavaScript的基础知识,旨在帮助新手快速入门并掌握这门语言的核心概念。 一、变量与数据类型 在JavaScript中,变量用于存储数据。...

    JavaScript笔记.chm

    JavaScript笔记.chm

Global site tag (gtag.js) - Google Analytics