Chương 4: định nghĩa function 2007-08-24 12:10:00

Javascript cũng như hầu hết các ngôn ngữ lập trình khác cho phép người dùng định nghĩa những hàm riêng để sử dụng.
Cú pháp:
function funtcion_name(list_đối_số){
khối lệnh cần thực hiện
}

Một vài cách gọi hàm javascript thường sử dụng:
Gọi trong script:
<script>
function_name(đối_số);
</script>


Gọi bằng 1 sự kiện:
<div onclick="function_name(đối_số);">Nội dung</div>
<div ondblclick="function_name(đối_số);">Nội dung</div>
....


Gọi qua link:
<a href="javascrip:function_name(đối_số);">Click</a>


Lấy các đối số của function:
<script>
function listItems()
{
   var items = listItems.arguments.length
   for (i = 0;i < items;i++)
   {
      document.write(listItems.arguments[i] + "\n")
   }
}
listItems("Sunday","Monday");
</script>

Kết quả:
Sunday
Monday

Biến cục bộ:
các biến khai báo bên trong hàm là các biến cục bộ và thời gian sống của biến cục bộ là sau khi thực hiện xong hàm.
Biến toàn cục: được khai báo bên ngoài hàm và có thời gian sống là từ khi biến được khai báo cho đến khi thực hiện xong script

Chú ý:
<script>
var global_var = 5;
function func(){
global_var = global_var + 5;
}
func();
document.write(global_var); // 10
// giá trị của biến toàn cục sẽ bị thay đổi sau khi gọi hàm func()
</script>


<script>
var global_var = 5;
function func(){
var global_var = 2;
global_var = global_var + 5;
}
func();
document.write(global_var); // 5
// cho dù trong hàm func() có biến trùng tên với biến toàn cục, thì nó cũng được xem là biến cục bộ
func()
</script>

Tra loi 1 comment(s) TG 2007-08-24 12:10:00

uoon 2007-08-25 08:47:07

Chào cả nhà, nhân tiện bác TG có bài về này, em cũng xin bổ xung thêm cho nó đông đủ.
Định nghĩa 1 function :
var newF = function(thamso1, thamso2..) {
}


Cách viết này tương đương với
function newF(thamso1, thamso2..) {
}

Đại khái về mặt chức năng thì 2 cách viết này là giống hệt nhau. Nhưng trong ajax thì nó có khác một chút.
VD khi ai đó muốn xử dụng hàm eval như thế này:
eval(ajax.responseText) ;
với ajax.responseText là chuỗi :
function newF(thamso1, thamso2..) {
}

Khi đó trong trang có 1 thẻ a có sự kiện onclick phải tham chiếu đến hàm newF() thì sẽ bị lỗi do hàm newF không tồn tại.
Nhưng khi viết hàm theo cú pháp var newF = function(){}
và áp dụng trong trường hợp trên thì ok. Lý do là trình duyệt sẽ tham chiếu tới tổ hợp ký tự "newF" như là một biến.

Một cách khác để tạo một hàm mới như sau
var newF = new Function(thamso1, thamso2.., nội dung của hàm)
VD:
var newF = new Function("a", "b", "alert(a+b)" );
     newF(2, 3);
     newF("mot" , "tram");
Chú ý chữ "Function" phải viết hoa chữ "F" nó giống như khai báo new Array() hoặc là new Object()..
Với cách viết này chúng ta có thể viết một hàm động (dynamic) bằng chính javascript. Có thể hiểu tình huống này như sau:
Khi làm một việc gì đó có tính lặp lại, chúng ta viết ra một hàm trước để thực hiện công việc đó.
Trong trường hợp này là khi nào cần thì chúng ta mới tạo ra một hàm để thực hiện công việc cần thiết. Chỗ này hơi loằng ngoằng một chút : )

Phần sau xin được nói đến một phương thức khá là hay ho của  hàm. Phương thức : call.
Mọi hàm số khi được tạo ra đều có phương thức này. Phương thức này cho phép 1 hàm gọi (call :D ) đến một đối tượng (object) và sẽ coi đối tượng đó như là chính mình (tinh thần   AQ) Để minh họa, chúng ta xem một ví dụ sau:
var oB = new Object();
     oB.id = "9";
     oB.name = "Uran";


function test(a, b) {
   alert("id : " + this.id + a);
   alert("name: " + this.name + b);
}

test.call(oB, "2", "nium");


trong khi đó theo lẽ thông thường chúng ta cần phải viết như sau:
  function test(a, b) {
   alert("id : " + oB.id + a);
   alert("name: " + oB.name + b);
}


Chúng ta có thể thấy trong vd trên, 2 thuộc tính id và name vốn là của đối tượng oB. Vậy mà trong hàm test nó sử dụng y như là của chính bản thân nó vậy -> this.id, this.name.

Nói chung các ý kiến em đưa ra ở đây, bình thường các bác cũng chẳng cần đụng đến, cứ code js như mọi ngày là được :). Chỉ có bác nào muốn tìm hiểu về OOP trong javascript hoặc là những ai có ý định tạo một thư viện riêng thì tham khảo qua
hì hì.

Tra loi

Y kien