JS学习笔记(三)函数
js中的方法名一般都是首字母小写,其余单词首字母大写的规范。
声明
function 函数名(参数列表) {
// 函数体
return 返回值;
}
调用
函数名();
(js中花括号喜欢用这种方式,因为在以前的浏览器中会在每行js代码的末尾添加分号,但现在的浏览器一般已经兼容这种写法,但仍保留这种习惯。)
需要注意的是只有在js的函数中声明的对象才具有块级作用域。函数中变量一定要定义,否则就是全局变量。
在解释js的时候,会先将其读入内存进行解释,再一步一步的从上到下的执行代码。js的函数也是变量值,即可以把函数赋值给变量。
function func1 () { // 代码体 } var myFunc; myFunc = func1; //直接使用myFunc代替func1 //或者 var func = function() { // 这是一个Lambda函数,也称为匿名函数 }; func();
如果函数中声明的变量名或函数名和对应全局的变量名或函数名一致,则会覆盖全局对象。
调试
js只能在浏览器中进行调试,如使在FireFox浏览器中安装firebug插件进行调试,而chorme可直接右键选项进行调试。
变量名提升和函数名提升
函数中的成员具有局部作用域,会出现变量名提升和函数名提升的问题。
如 var func = function(){
alert(i);
}
func();
程序执行时,先进入func()函数的函数体中,然后执行alert(i),此时会先在函数体内寻找变量i,因为找不到,所以跳到上一级作用域链中,由于函数定义代码之前还是没有变量i的定义,所以程序报错(i is undefined)。
但是如下情况
var func = function(){
alert(i);
var i = 456;
alert(i);
};
func();
程序不会报错,会先弹出undefined,再弹出456。
上面程序相当于
var func = function(){
var i;
alert(i);
var i = 456;
alert(i);
};
func();
所以不会报错。这就是变量名提升,函数名提升同理。
构造函数
在js中没有类的概念,但是有函数,函数可以作为构造函数来使用
使用方法
声明一个函数(构造函数) new 的方式创建对象,模拟类的样子进行创建
function Person(n, a, s) { // 如果需要为对象添加属性(字段) // 使用 this.属性名 = 值 this.name = n; this.age = a; this.sex = s; this.say = function() { alert("我是" + this.name); }; } // 当类来用 // 创建对象使用new 关键字 var p = new Person("杨洪波", 29, "女"); p.say(); alert(p.name); alert(p.sex); alert(p.age);
给对象动态的添加成员
var o = {};
o.say = function() {
alert("你好, 我是" + this.name);
};
o.say();
如果对象不具备这个属性,那么用对象去访问就会得到undefined。可以用来验证浏览器是否具备某个方法,写类库的时候,用来判断前面是否已经定义过这个方法,保证方法的可用。
删除对象成员
使用delete运算符
语法: boolean delete 属性或变量或数组成员;
如 delete o.say;
可以删除没有使用var声明的变量(所以变量的声明一定要加var关键字)
JS学习笔记(三)函数的更多相关文章
- JS学习笔记 (五) 函数进阶
1.函数基础 1.1 函数的基本概念 函数是一段JavaScript代码,只被定义一次,但是可以被调用或者执行许多次.函数是一种对象,可以设置属性,或调用方法. 函数中的参数分为实参和形参.其中,形参 ...
- JS学习笔记 (三) 对象进阶
1.JS对象 1.1 JS对象特征 1.JS对象是基本数据数据类型之一,是一种复合值,可以看成若干属性的集合. 属性是名值对的形式(key:value) 属性名是字符串,因此可以把对象看成是字符串到值 ...
- JS学习笔记3_函数表达式
1.函数表达式与函数声明的区别 函数声明有“提升”(hoisting)的特性,而函数表达式没有.也就是说,函数声明会在加载代码时被预先加载到context中,而函数表达式只有在执行表达式语句时才会被加 ...
- js学习笔记19----getElementsByClassName函数封装
js里面的getElementsByClassName()方法可通过某个class名获取到元素,在标准浏览器下可使用,在非标准浏览器下不可用.为了能够让这个方法兼容所有的浏览器,可以封装成如下函数: ...
- Node.js学习笔记(三) --- package.json 及cnpm
一.包 Nodejs 中除了它自己提供的核心模块外,我们可以自定义模块,也可以使用第三方的模块.Nodejs 中第三方模块由包组成,可以通过包来对一组具有相互依赖关系的模块进行统一管理. 完全符合 ...
- python学习笔记三 函数(基础篇)
函数 内置函数 常用的内建函数: type() 列出指定对象的类型 help() 能够提供详细的帮助信息 dir() 将对象的所有特性列出 vars() 列出当前模块的所有变量 file, ...
- 10-Node.js学习笔记-异步函数
异步函数 异步函数是异步编程语法的终极解决方案,它可以让我们将异步代码写成同步的形式,让代码不再有回调函数嵌套,是代码变得清晰明了 const fn = async()=>{} async fu ...
- Typescript 学习笔记三:函数
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES6学习笔记<三> 生成器函数与yield
为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...
- MYSQL学习笔记三:日期和时间函数
MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...
随机推荐
- QStringList不是简单重命名的便利类,而是提供了额外的函数,比如sort和join等等
以前一直以为就是重命名而已,原来还不是.QT真伟大,方便到家了.该有的,全都有现成的.
- Delphi 全面控制Windows任务栏
核心提示:使用Windows95/NT/98操作系统的用户知道:Windows正常启动后,在电脑屏幕下方出现一块 任务栏. 使用Windows95/NT/98操作系统的用户知道:Windows正常启动 ...
- 简洁的jsp
在开发 是使用tomcat7版本(7的jslt表达式语法检查更加严格) 1.去除生产html的不必要的空行 <%@ page trimDirectiveWhitespaces="tru ...
- Linux 下防火墙端口设置
方式1: /sbin/iptables -I INPUT -p tcp --dport 8011 -j ACCEPT #开启8011端口 /etc/rc.d/init.d/ipta ...
- Magento WebServices SOAP API 创建和使用
首先 SOAP 简介: http://baike.baidu.com/view/1695890.htm?fromtitle=SOAP 然后简单介绍下Magento API.Magento API干啥用 ...
- denoising autoencoder
神经网络的挑战和关键技术: 1.神经网络结构决定(层,神经元,连接) 加入特定领域的知识(CNN 图片处理) 2.模型复杂度高 大的数据量: regularization: dro ...
- poj2864
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int main ...
- network is unreachable 解决方案之一
请按http://blog.csdn.net/oxiaoxio/article/details/41775183 一文中的设置方法设置:
- Spring流程
Spring Web Flow是Spring框架的子项目,作用是让程序按规定流程运行. 1 安装配置Spring Web Flow 虽然Spring Web Flow是Spring框架的子项目,但它并 ...
- 你想不到的压缩方法:将javascript文件压缩成PNG图像存储
这样可以做到很高的压缩比,到底有多高,下面会提到.这种方法用到了 canvas 控件,这也意味着只有支持 canvas 控件的浏览器下才有效. 现在你可以看到,上面的图像类似一个噪声图像,但它实际上是 ...