文档章节

JavaScript 函数

phpweishunlong
 phpweishunlong
发布于 2017/05/14 23:36
字数 628
阅读 2
收藏 0
点赞 0
评论 0

函数

前言

  • 在JavaScript中,函数即对象,程序可以随意操控它们。比如JavaScript可以把函数赋值给变量,或者作为参数传递给其他函数。

定义函数

1. 第一种方式

//在这里调用可以
test();

function test(){
	console.log('aaa');
}

2. 第二种方式

//这样调用不行
squre();

//将函数赋值给squre变量
var squre = function (x) { return x*x; };

//也可以有名字
var squre = function fact() {return x;};
3. 第三种方式

//函数会自动调用
(function (x) {return x*x;})(10);

函数作用域

1. 如果一个变量在函数体内部声明,则该变量的作用域为整个函数体,在函数体外不可引用该变量

function foo() {
	var x = 1;
	x = x + 1;
}

x = x + 2; //无法在foo函数体外引用变量x


2. 如果两个不同的函数各自申明了同一个变量,那么该变量只在各自的函数体内起作用。换句话说,不同函数内部的同名变量互相独立,互不影响

function foo() {
	var x = 1;
	x = x + 1;
}

//bar函数中的变量不会受foo函数影响
function bar() {
    var x = 'A';
    x = x + 'B';
}

3. 由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行

function foo() {
    var x = 1;
    function bar() {
        var y = x + 1; // bar可以访问foo的变量x
    }

    var z = y + 1; //  foo不可以访问bar的变量y
}

4. 如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量

function foo() {
    var x = 1;
    function bar() {
        var x = 'A';
        alert('x in bar() = ' + x); // 'A'
    }
    alert('x in foo() = ' + x); // 1
    bar();
}

5. 变量提升

JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部


function test(){
	console.log(a);//undefined;
	var a = 12;
}

//相当于下面
function test(){
	
	var a;

	a = 12;
}

闭包

所谓闭包其实就是函数中包含了函数。

function foo(){

	//由于sex是局部变量,只能在foo内部访问。类似于类的私有属性
	var sex = '男';

	function getSex(){
		console.log(sex);
	}

	//将getSex函数返回
	return getSex;
}


闭包可以封装一个私有变量,类似php中的private效果。

function foo(){

	//由于sex是局部变量,只能在foo内部访问。类似于类的私有属性
	var sex = '男';

	function getSex(){
		console.log(sex);
	}

	//将getSex函数返回
	return getSex;
}

//调用foo函数
var res = foo();

//res其实就是getSex函数
res();

© 著作权归作者所有

共有 人打赏支持
phpweishunlong
粉丝 1
博文 64
码字总数 26259
作品 0
广州
程序员

暂无文章

Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
35分钟前
13
0
流利阅读笔记30-20180719待学习

1.今日导读 2.带着问题听讲解 3.新闻正文(中英文对照) 4.重点词汇 5.拓展内容

aibinxiao
37分钟前
1
0
OSChina 周五乱弹 —— 我们是食物链的最底层

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @温家成 :分享谢安琪的单曲《姿色份子》 《姿色份子》- 谢安琪 手机党少年们想听歌,请使劲儿戳(这里) @贪吃飒:最近p2p怎么了、半个月爆了...

小小编辑
51分钟前
6
1
Android Studio 3.0 之后打包apk出现应用未安装问题

1、废话 出现这个问题的原因,并不是只有一个,而是有多个原因,不懂的估计会被搞得一头雾水,下面我列举的是我遇到的几种问题和网友遇到的几种问题,但不一定是全部,也有可能有些莫名其妙的...

她叫我小渝
今天
0
0
前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
9
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部