javascript中如何定義靜態變數和全域性變數

2021-03-04 09:23:23 字數 4992 閱讀 2084

1樓:匿名使用者

全域性變數就是在js中宣告的變數

在當前的文件中全域性有效

如var a;

var b=1;

var c="str";

var d=function(){}

var e=[,];

這些都算是。

如果是function ()

2樓:匿名使用者

.............變數的問題無視了.

element.style.fontweight="xx"//字型寬度

使用filesystemobject

為什麼定義的靜態全域性變數用在函式裡和在函式裡定義定義的靜態區域性變數輸出的值不一樣啊? 謝謝了!!!

3樓:手機使用者

保留字肯定就是關鍵字撒,

(1)auto

這個這個關鍵字用於宣告變數的生存期為自動,即將不在任何類、結構、列舉、聯合和函式中定義的變數視為全域性變數,而在函式中定義的變數視為區域性變數。這個關鍵字不怎麼多寫,因為所有的變數預設就是auto的。

(2)register

這個關鍵字命令編譯器儘可能的將變數存在cpu內部暫存器中而不是通過記憶體定址訪問以提高效率。

(3)static

常見的兩種用途:

1>統計函式被呼叫的次數;

2>減少區域性陣列建立和賦值的開銷.變數的建立和賦值是需要一定的處理器開銷的,特別是陣列等含有較多元素的儲存型別。在一些含有較多的變數並且被經常呼叫的函式中,可以將一些陣列宣告為static型別,以減少建立或者初始化這些變數的開銷.

詳細說明:

1>、變數會被放在程式的全域性儲存區中,這樣可以在下一次呼叫的時候還可以保持原來的賦值。這一點是它與堆疊變數和堆變數的區別。

2>、變數用static告知編譯器,自己僅僅在變數的作用範圍內可見。這一點是它與全域性變數的區別。

3>當static用來修飾全域性變數時,它就改變了全域性變數的作用域,使其不能被別的程式extern,限制在了當前檔案裡,但是沒有改變其存放位置,還是在全域性靜態儲存區。

使用注意:

1>若全域性變數僅在單個c檔案中訪問,則可以將這個變數修改為靜態全域性變數,以降低模組間的耦合度;

2>若全域性變數僅由單個函式訪問,則可以將這個變數改為該函式的靜態區域性變數,以降低模組間的耦合度;

3>設計和使用訪問動態全域性變數、靜態全域性變數、靜態區域性變數的函式時,需要考慮重入問題(只要輸入資料相同就應產生相同的輸出)

(4)const

被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。它可以修飾函式的引數、返回值,甚至函式的定義體。

作用:1>修飾輸入引數

a.對於非內部資料型別的輸入引數,應該將「值傳遞」的方式改為「const引用傳遞」,目的是提高效率。例如將void func(a a) 改為void func(const a &a)。

b.對於內部資料型別的輸入引數,不要將「值傳遞」的方式改為「const引用傳遞」。否則既達不到提高效率的目的,又降低了函式的可理解性。

例如void func(int x) 不應該改為void func(const int &x)。

2>用const修飾函式的返回值

a.如果給以「指標傳遞」方式的函式返回值加const修飾,那麼函式返回值(即指標)的內容不能被修改,該返回值只能被賦給加const修飾的同型別指標。

如對於: const char * getstring(void);

如下語句將出現編譯錯誤:

char *str = getstring();//cannot convert from 'const char *' to 'char *';

正確的用法是:

const char *str = getstring();

b.如果函式返回值採用「值傳遞方式」,由於函式會把返回值複製到外部臨時的儲存單元中,加const修飾沒有任何價值。 如不要把函式int getint(void) 寫成const int getint(void)。

3>const成員函式的宣告中,const關鍵字只能放在函式宣告的尾部,表示該類成員不修改物件.

說明:const type m; //修飾m為不可改變

示例:typedef char * pstr; //新的型別pstr;

char string[4] = "abc";

const char *p1 = string;

p1++; //正確,上邊修飾的是*p1,p1可變

const pstr p2 = string;

p2++; //錯誤,上邊修飾的是p2,p2不可變,*p2可變

同理,const修飾指標時用此原則判斷就不會混淆了。

const int *value; //*value不可變,value可變

int* const value; //value不可變,*value可變

const (int *) value; //(int *)是一種type,value不可變,*value可變

//邏輯上這樣理解,編譯不能通過,需要tydef int* newtype;

const int* const value;//*value,value都不可變

(5)volatile

表明某個變數的值可能在外部被改變,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在暫存器裡的備份。它可以適用於基礎型別如:int,char,long......

也適用於c的結構和c++的類。當對結構或者類物件使用volatile修飾的時候,結構或者類的所有成員都會被視為volatile.

該關鍵字在多執行緒環境下經常使用,因為在編寫多執行緒的程式時,同一個變數可能被多個執行緒修改,而程式通過該變數同步各個執行緒。

簡單示例:

dword __stdcall threadfunc(lpvoid signal)

該執行緒啟動時將intsignal 置為2,然後迴圈等待直到intsignal 為1 時退出。顯然intsignal的值必須在外部被改變,否則該執行緒不會退出。但是實際執行的時候該執行緒卻不會退出,即使在外部將它的值改為1,看一下對應的偽彙編**就明白了:

mov ax,signal

label:

if(ax!=1)

goto label

對於c編譯器來說,它並不知道這個值會被其他執行緒修改。自然就把它cache在暫存器裡面。c 編譯器是沒有執行緒概念的,這時候就需要用到volatile。

volatile 的本意是指:這個值可能會在當前執行緒外部被改變。也就是說,我們要在threadfunc中的intsignal前面加上volatile關鍵字,這時候,編譯器知道該變數的值會在外部改變,因此每次訪問該變數時會重新讀取,所作的迴圈變為如下面偽碼所示:

label:

mov ax,signal

if(ax!=1)

goto label

注意:一個引數既可以是const同時是volatile,是volatile因為它可能被意想不到地改變。它是const因為程式不應該試圖去修改它。

(6)extern

extern 意為「外來的」···它的作用在於告訴編譯器:有這個變數,它可能不存在當前的檔案中,但它肯定要存在於工程中的某一個原始檔中或者一個dll的輸出中。

參考 另外:c語言中的關鍵字

auto :宣告自動變數 一般不使用

double :宣告雙精度變數或函式

int: 宣告整型變數或函式

struct:宣告結構體變數或函式

break:跳出當前迴圈

else :條件語句否定分支(與 if 連用)

long :宣告長整型變數或函式

switch :用於開關語句

case:開關語句分支

enum :宣告列舉型別

register:宣告積存器變數

typedef:用以給資料型別取別名(當然還有其他作用)

char :宣告字元型變數或函式

extern:宣告變數是在其他檔案正宣告(也可以看做是引用變數)

return :子程式返回語句(可以帶引數,也看不帶引數)

union:宣告聯合資料型別

const :宣告只讀變數

float:宣告浮點型變數或函式

short :宣告短整型變數或函式

unsigned:宣告無符號型別變數或函式

continue:結束當前迴圈,開始下一輪迴圈

for:一種迴圈語句(可意會不可言傳)

signed:生命有符號型別變數或函式

void :宣告函式無返回值或無引數,宣告無型別指標(基本上就這三個作用)

default:開關語句中的「其他」分支

goto:無條件跳轉語句

sizeof:計算資料型別長度

volatile:說明變數在程式執行中可被隱含地改變

do :迴圈語句的迴圈體

while :迴圈語句的迴圈條件

static :宣告靜態變數

if:條件語句

4樓:du瓶邪

例如:c/c++ code

void thefunc(void)}

5樓:段啟中

#include

static int j; //全域性靜態變數,一直佔記憶體,直到程式執行結束。

void fun1(void)

void fun2(void)

int main(void)

這是1

return 0;}

6樓:行行都不行

j因為先賦值為0,然後自加,所以值為1.

i為10的原因:函式靜態變數的記憶體空間只被分配一次,對函式的多次呼叫相當於多次作用於同一個靜態變數。因為每次呼叫都有i++,所以函式呼叫10次相當於i自加10次,所以為10。

7樓:不正便歪

for(int k=0; k<10; k++)

javascript如何呼叫Jquery呢

這位你好,想呼叫jquery的方法你必須先引用jquery檔案,其次你的這個元素必須是jquery物件才可以。如果缺了上面的兩個條件是不可以的,也就是說js不能直接呼叫jq方法。其中 src 中就是存放 jquery 檔案的相對路徑,也可以使用微軟或谷歌的公共 jquery 庫 cdn 地址。首先在...

javascript中HI代表什麼

什麼時候有這樣的寫法的.h前面應該還有內容的 吧.比如 document.body.innerhtml hello,world 它的意思表示.i是一個變數.輸出不同大小的字號.比如.h1.h2.也輸出標籤.我猜你的 應該是這樣的吧.for var i 1 i 4 i 輸出的 用引號括起來.變數用加號...

在javascript中substr和substring的區別是什麼

1.在js中函式宣告 stringobject.substring start,stop start是在原字串檢索的開始位置,stop是檢索的終止位置,返回結果中不包括stop所指字元.如 hamburger substring 4,8 returns urge 2.substr start,len...