变量作用域问题2(部分变量未声明)

例一

var x=10;全局变量(开辟空间)
function outer(){
x=20;//此处未声明变量(未开辟空间),只给全局变量声明了,此处赋值会把全局变量开辟的存储空间的值替换掉(全局变量中的x替换成20)。
function inner(){
x=30;//此处未声明变量(未开辟空间),只给全局变量声明了,此处赋值会把全局变量开辟的存储空间的值替换掉(全局变量中的x替换成30)。
alert(x);//3、输出x的值为30;
}
inner();//2.执行inner();
alert(x);//4、输出x的值为30;
}
outer();//1.执行outer();
alert(x);//5、输出x的值为30;
//结果:30 30 30

例二

var x=10;//全局变量(开辟空间1)
function outer(){
var x=20;//局部变量(开辟空间2)
function innter(){
x=30;//局部变量(未开辟空间),开辟空间2的x值被赋值为30
alert(x);//3.弹出innter()的局部变量x=30;
}
innter();//2.执行函数innter()
alert(x);//4.弹出outer()的局部变量x=30;
}
outer();//1、执行函数outer();
alert(x);//5.弹出全局变量x=10;
//结果:30 30 10

时间: 2024-10-12 04:42:15

变量作用域问题2(部分变量未声明)的相关文章

原型模式故事链(5)--JS变量作用域、作用域链、闭包

上一章 JS执行上下文.变量提升.函数声明 传送门:https://segmentfault.com/a/11... 本次我们主要讲讲变量作用域和闭包变量作用域:顾名思义:变量起作用的范围.变量分为全局变量和局部变量.全局变量:在任何地方都能用,在所有函数之外.局部变量:只能在定义它的函数中,以及它的子函数中使用. 当前作用域没有定义的变量,称为自由变量. 举例子: <!DOCTYPE html> <html> <head> <title>dsfg</

OC点语法和变量作用域

OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObject 4 { 5 int _age;//默认为@protected 6 } 7 8 - (void)setAge:(int)age; 9 - (int)age; 10 11 @end Person类的实现: 1 #import "Person.h" 2 3 @imp

delphi变量作用域

完全摘自网络(一件飘雪),供参考: 很多初学者对delphi单元的变量和函数访问权限不理解,在此我举例说明,希望初学者看此文后能茅塞顿开. delphi单元的变量和函数访问权限问题如下两个单元描述: unit Unit1; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; type//=========================

Objective-C之成魔之路【9-类构造方法和成员变量作用域、以及变量】

重开发者的劳动成果,请勿转载 构造方法 出于初始化类中的成员变量的需要, 可以提供一个方法用于此目的, 这个方法就叫构造方法或构造方法(Constructor). 与C++和Java不同, Objective-C命名是没有限制的, 并且有返回值本身类型指针. 以音乐类举例: Song.h文件 @interface Song : NSObject { NSString *title; NSString *artist; long int duration; } //操作方法 - (void)sta

OC 点语法和变量作用域

一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObject 4 { 5 int _age;//默认为@protected 6 } 7 8 - (void)setAge:(int)age; 9 - (int)age; 10 11 @end Person类的实现: 1 #import "Person.h" 2 3 @implementation

Objective-C语言-点语法和变量作用域[email&#160;protected] @synthesize和id

  一.点语法 (一)认识点语法 声明一个Person类: #import <Foundation/Foundation.h> @interface Person : NSObject { int _age;//默认为@protected } - (void)setAge:(int)age; - (int)age; @end Person类的实现: #import "Person.h" @implementation Person - (void)setAge:(int)a

文件载入流程,函数的使用【函数名,参数【按引用赋值的问题】,函数体,【变量作用域和生命周期】】

1.求最大公约数辗转相除求值例如:12,8求最大公约数12%8=4[不为零]8%4=0[为零,则4为最大公约数][原理就是12,8的最大公约数和8,4的最大公约数一致][这个问题已经可被证明]计算机中最早的算法 2.文件载入---流程[php执行的先后顺序][php对代码的编译以文件为单位]先检查一个文件中的语法再进行编译然后才会一行行解释执行 [这一点需要注意]这里进行文件载入的流程讲解:php文件载入时,被引入的文件中的语法并不会解析,只有当该文件被执行[也就是被引入语句之后的部分才会报错]

利用try-catch判断变量是已声明未声明还是未赋值

原文 利用try-catch判断变量是已声明未声明还是未赋值 这篇文章主要介绍了利用try-catch判断变量是已声明未赋值还是未声明,需要的朋友可以参考下 目的是如果一个变量是已声明未赋值,就可以直接赋值:并且不能改变变量的作用域 如果未声明的话,就重新声明, 在网上搜了下,常见的方法是if(typeof(a)=='undefined'){var a='ss';}, 但是这种方法对未声明或已声明未赋值的变量都会返回true.而且如果是这样: 代码如下: var a; function f(){

JavaScript中的作用域与函数和变量声明的提升

  var foo = 1; function bar() {     if (!foo) {         var foo = 10;     }     alert(foo); } bar();//解释:js没有块级作用域,if switch while等不会有块级作用域 如果你对foo的值实际上为"10"而感到诧异的话,再看一下下面这个例子: var a = 1; function b() {     a = 10;     return;     function a() {