Javascript 变量、函数的声明
javascript变量
全局变量和局部变量
按照变量的作用域来区分,和大多数编程语言类似,javascript变量也分为全局变量和局部变量。全局变量的作用域是整个js文件,而局部变量的作用域是该变量被定义的函数内部,也包括在该函数内部定义的函数的内部。其实无论是全局变量还是局部变量,他们都是在其被创建的环境(比如函数)中,以及被创建的环境所包含的子环境(比如函数内部的函数)中有效。
块作用域
变量的作用域是基于函数的,而不是基于块的。在c++中,在花括号 { }中声明的变量,在花括号外不可见,这就是块作用域;而在javascript中,花括号内部声明的局部变量,在花括号外仍可见。
function f1(){
if(1){
var a = 100;
}
alert(a);
}
f1(); // alert 100
变量和函数的声明
在javascript引擎解析javascript代码的时候,首先javascript引擎会把变量和函数的声明提前进行预解析,然后再去执行其他代码。
变量的声明
变量的声明只有一种方式,就是用var关键字声明,直接赋值不是一种声明方式!它仅仅是在全局对象上创建了新的属性(而不是变量)。
var num = 1; 是在当前域中声明变量,如果在方法中声明,则为局部变量;如果是在全局域中声明,则为全局变量。
而num=1;
是对属性赋值的操作,首先,它会尝试在当前作用域链中解析num,如果在当前作用域链中找到num,则会执行对num属性赋值;如果没有找到num,它会在上一层作用域链中找....
直到找到最上层的作用域,即全局作用域,此时它会在全局作用域中创造num属性并赋值。
由于变量声明自带不可删除属性,比如var num=1 和 num = 1,前者是变量声明,带不可删除属性,因此无法被删除;后者为全局变量的一个属性,可以从全局变量中删除。
声明和赋值的区别
(1)声明会在解释器预解析js代码的时候被提前,而赋值不会。
alert(a); // undefined ,被声明提前,但此刻未被赋值
alert(b); // error "b" is not defined
b = 10;
var a = 20;
(2)直接赋值形式是在执行阶段创建
alert(a); // undefined
b = 10;
alert(b); // 10, 代码执行阶段创建 var a = 20;
alert(a); // 20, 代码执行阶段修改
(3)变量不能被删除,属性可以
a = 10;
alert(window.a); // 10,是一个全局对象window的属性
alert(delete a); // true
alert(window.a); // undefined
var b = 20;
alert(window.b); // 20
alert(delete b); // false
alert(window.b); // 仍然为 20,因为变量是不能够删除的。
函数声明
函数声明有三种方式:
(1)function name(){} 直接创建
function add(a,b){
return a+b;
}
add(5,4);
(2)new Function 构建函数创建
var add=new Function("a", "b", "return a+b;");
add(4,5);
(3)给变量赋值匿名函数方法创建
var add = function(a,b){
return a+b;
}
add(4,5);
其中,第二种和第三种方法,在声明前访问时,返回的都是一个undefined的变量。在声明后访问他们都是一个function的函数。
如果变量名和函数名声明相同,函数优先声明
alert(x); // function
var x = 10;
alert(x); // 10
x = 20;
function x() {};
alert(x); // 20
Javascript 变量、函数的声明的更多相关文章
- JavaScript 变量作用域和声明提升
一.变量作用域 说到这个概念,不有自主的想到this,scope 这两个关键字. JavaScript的this总是指向一个明确的对象,这个对象是在执行的时候动态绑定的.通俗的说就是谁调用我,我的th ...
- JavaScript基础函数的声明(014)
1.函数的重要地位 函数(functions)在JavaScript里有着重要的地位,其原因有二: 它们是一种特殊的对象 它们提供作用域 说函数在JavaScript里是特殊的对象,因为: 程序的执行 ...
- 【JavaScript高级进阶】JavaScript变量/函数提升的细节总结
// 测试1 console.log('----------test1--------------'); console.log(global); // undefined var global = ...
- var与Javascript变量隐式声明
在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它.var x = "XX"; y ="xxx ...
- 声明(创建) JavaScript 变量
在 JavaScript 中创建变量通常称为"声明"变量. 我们使用 var 关键词来声明变量: var carname; 变量声明之后,该变量是空的(它没有值). 如需向变量赋值 ...
- JavaScript 变量
一,JavaScript 变量(存储信息的容器) 与代数一样,JavaScript 变量可用于存放值(比如 x=2)和表达式(比如 z=x+y). 变量可以使用短名称(比如 x 和 y),也可以使用描 ...
- 谈谈javascript的函数作用域
在一些类似c语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称为块级作用域(block scope),而javascript中没有块级作用域.取 ...
- day133:2RenMJ:TypeScript的变量&函数&类&接口
目录 1.变量 2.函数 3.类 4.接口 1.变量 1.变量的声明 // 1.即指定数据类型 也指定值 var 变量名:类型 = 值; eg:var username:string = " ...
- PHP函数(四)-变量函数
变量函数 将声明的函数的函数名赋给一个变量,通过该变量来调用函数 <?php function Calculate($a,$b){ return $a + $b; } echo "计算 ...
- 7.JavaScript变量
VAR声明变量,一条语句可以声明多个变量 var name="Gates", age=56, job="CEO"; Value = undefined 在计算机 ...
随机推荐
- 深度优先搜素之N皇后问题
#include<stdio.h>#include<malloc.h>#include<math.h>int x,a[101],book[101],count=0; ...
- python之进程和线程
1 操作系统 为什么要有操作系统 ? 操作系统位于底层硬件与应用软件之间的一层 工作方式:向下管理硬件,向上提供接口 操作系统进程切换: 出现IO操作 固定时间 2 进程和线程的概念 进程就是一个程序 ...
- Linux命令第四篇
作业四: 1) 新建目录/test/dir,属主为tom,数组为group1,/test目录的权限为777 # useradd tom [root@localhost /]# groupadd gr ...
- hdu6024 Building Shops(区间dp)
https://cn.vjudge.net/problem/HDU-6024 分开考虑某一点种与不种,最后取二者的最小值. dp[i][1] = min(dp[i-1][0], dp[i-1][1]) ...
- Java全栈程序员之08:MAVEN+JAVA配置
从Spring3.0开始,Spring支持以Java配置的方式来代替XML配置.这一点说起来其实有点可笑,XML配置的方式最初被创建出来就是为了让配置与程序员无关.可是最终我们发现,绝大多数的那些配置 ...
- 你真的会打 Log 吗
前言 工程师在日常开发工作中,更多的编码都是基于现有系统来进行版本迭代.在软件生命周期中,工程维护的比重也往往过半.当我们维护的系统出现问题时,第一时间想到的是查看日志来判断问题原因,这时候日志记录如 ...
- Android开发中常见的设计模式 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- ESP-EYE V2.1 开发板 WINDOWS 10 开发入门
准备工作 1 × ESP-EYE V2.1 开发板 1 × Micro USB B 电缆 1 × PC(Windows10) 简介 ESP-EYE 是一款面向人脸识别和语音识别市场的开发板,搭载 ES ...
- Centos PHP+Apache执行exec()等Linux脚本权限设置的详细步骤
1. 查看一下你的Apache的执行用户是谁: lsof -i:80 运行之后的结果为: 从图中我们可以清楚的看到,httpd(也就是Apache)的执行用户为:exec_shell( ...
- Log4j/Log4j2自定义Appender来实现日志级别计数统计及监控
一.简述 本文主要讲如何基于Log4j2来实现自定义的Appender.一般用途是用于Log4j2自带的Appender不足以满足我们的需求,或者需要我们对日志进行拦截统计等操作时,需要我们自定义Ap ...