javascript的几个作用域

for循环

for(var i=1; i<=3;i++)
{
}
alert(i) // 输出4 ;

这里i无论申明否均是全局变量。

将for循环放函数内

var i =0;
function test(){
for(var i=0;i<=10;i++)
{}
}
test();
alert(i)

// 如果没加var ,输出11,

//加了var ,输出0

这说明for循环的参数还是有作用域区别的

函数参数作用域

var a ;
function hello(a){
a = 2
}
hello();
alert(a);

// 2

// 去掉参数a,则为underfine.

说明了在函数内部变量,假如传递参数有此变量,不申明也是局部变量。均为局部作用域变量。

var a ;
function hello(a){
var a
alert(a)
}
hello(2); // 2
alert(a); //undefine

说明了函数参数有变量名,内部申明和不申明效果一致。

时间: 2024-11-10 01:11:42

javascript的几个作用域的相关文章

javascript模仿块级作用域

作用域有词法作用域和块级作用域之分,javascript属于词法作用域,而在java.C++中却是块级作用域.在javascript中,只有函数能够创建作用域,作用域是以function作为边界的. 先看一段代码: function outPut(){ for(i=0;i<5;i++) { console.log(i);//0,1,2,3,4 第一个i } console.log(i);//5 第二个i }; 解释:在java等语言中,for循环这块代码中的i变量将会被销毁,第二个i打印出来就是

JavaScript高级程序设计之作用域链

JavaScript只有函数作用域:每个函数都有个作用域链直达window对象. 变量的查找由内而外层层查找,找到即止. 同时不仅可以查找使用,甚至可以改变外部变量. var color = "blue"; function changeColor() { var anotherColor = "red"; function swapColors() { var tempColor = anotherColor; anotherColor = color; colo

JavaScript递归中的作用域问题

需求是这样的,从子节点寻找指定className的父节点,一开始就想到递归(笨!),Dom结构如下: <div class="layer_1"> <div class="layer_2"> <div class="layer_3"> <div id="layer_4"></div> </div> </div> </div> 先通过i

javaScript中的this作用域

javaScript中的this作用域java的区别是,java中的this是在编译中确定, javaScript中的this是在运行时确定的,不同的调用方式,决定js中的this指向不同的对象. 代码实现: //this作用域 function sayName(){ console.log(this.name); console.log(this ===d1); console.log(this ===d2); console.log(this ===window); } sayName();

javascript痛点之一变量作用域

1.用var声明的变量是有作用域的,比如我们在函数中用var声明一个变量 1 'use strict'; 2 function num(){ 3 //用var声明一个变量num1 4 var num1 = 15; 5 } 函数中声明了一个变量num1,在js函数中用var声明变量实际上就声明了一个局部变量.局部变量就是在外部访问不到只能在函数内部访问. 1 'use strict'; 2 function num(){ 3 //用var声明一个变量num1 4 var num1 = 15; 5

从头开始学JavaScript (二)——变量及其作用域

原文:从头开始学JavaScript (二)--变量及其作用域 一.变量 ECMAscript变量是松散型变量,所谓松散型变量,就是变量名称可以保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符. 定义:var firstDemo; 二.变量的作用域 2.1基本概念 使用var 定义变量:定义该变量的作用域的局部变量,这种定义变量的方法也被成为显式声明. 这么说不理解的话可以看看下面这个简单粗暴的例子: test();function test(){var firstDemo="hello

JavaScript this 局部变量全局变量 作用域 作用域链 闭包

从阮老师博客的一道测试题说起: 代码段一: var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()()); 代码段二: var name = "The Window"; var object

Javascript我学之四作用域

本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘 作用域 JavaScript的变量作用域只有两种,全局作用域和函数作用域. 函数的作用域 函数中定义的变量是私有的,仅在本函数范围内有效,称为“函数作用域”. 1 //每个函数,都定义了一个作用域 2 function add(num1, num2) { 3 var sum = num1 + num2; 4 return sum; 5 } 6 console.info(add(100, 200)); //300 7 console.inf

JavaScript基础——变量、作用域和内存问题

按照ECMA-262的定义,JavaScript的变量与其他语言的变量有很大区别.JavaScript变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值即其数据类型可以在脚本的声明周期内改变.尽管从某种角度看,这可能是一个既有趣又强大,但同时又容易出问题的特性,但JavaScript变量实际的复杂程度远不止如此. 基本类型和引用类型的值 ECMAScript变量可能包含两种不同数据类型的值:基本类型和引用类型值.

javascript变量声明和作用域提升

以前的知识总是忘,遇到代码又看不懂.要再复习一下,顺便记录一下. 1 add(1,2); 2 function add(a,b){ 3 alert(a+b); 4 } 代码能输出3,为什么不是按顺序执行?应该是  //add is not defined ... javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 也就是说,function add(a,b){alert(a+b)}是一个函数声明,告诉我们有